Neither approach I have is probably efficient, but I could see both being useful in certain game types.
For the first, you would need to create two separate maps -- one which is invisible, and X amount of studs higher than the visible one. Players would then spawn on the invisible map, and upon joining, their character would become invisible, and every body part would then be "Cloned" to the appropriate position (being the real body part's current position - the Y difference of the invisible map to the visible) on the visible map.
These body parts (on the visible map) would be visible of course, and whenever your character moves, each body part below would update accordingly. The rectify the camera issue, it would be quite easy to move the player's camera to the fake head whenever their player is cloned through simple use of local scripts in StarterGui.
However, with this, you might experience more lag than necessary, as well as a bit of lag with the movement of body parts. Physical tools and touched scripts would also require a lot more coding to get working. Regardless of the cons, I suppose this is one way.
The second method seems a bit more useful and simple. With this, each player would be made non-collide upon joining. You would then need to place a script into every block on the map (not difficult to do, of course). This script would basically move the player out of itself by using one of the body gyro/thrust/velocity things (I can never remember which one is appropriate until I test), or even CFrame. You could test if the player is inside of it by making a calculation that checks if any part of the player (excluding the arm) is within it's X coordinate * it's X size, if you understand what I'm generally saying.
These are all in theory though, and I can't verify either one works. I'm sure there's a better way to do it somewhere out there, but one of these (likely the second) would be where I'd personally start.
Good luck!