Officially, saving of state is not supported. Saving and restoring the full state of a Chipmunk space would be fairly tricky and time consuming to implement. The problem is that I couldn't just make a cpSaveSpaceToFile(space, "neat.txt") API call because it would need to provide some way for you to match up all the shapes, bodies and joints with your own data structures when it's reloaded.
For ScribBall, I implemented save games by just storing the position, rotation, velocity, radius, etc of all of the balls. When the game restarts there are a few frames where everything slips a little before the cached impulses for all the contacts stabilize, but it's not so bad really. I've also seen similar things happen in AAA games, so I'm assuming that I'm not the only one who thinks that this isn't a trivial thing to implement.
Though this has made me think, if the you are responsible for saving and re-adding all of the shapes, bodies, and joints back to the space, then the only thing missing is the cached impulses that are stored internally to the space. These impulses are stored using a pair of shape pointers as a key. It would be possible to save and reload these values if there was some unique value provided for each shape. The shape.id field was added so that the determinacy of the simulation could be controlled, but if stricter requirements were put on it's uniqueness, it could be used for the key instead of the shape's pointer. That significantly reduces the scope of what I would need to implement.