I guess this comes down to a lack of documentation on what is and isn't supposed to be opaque in Chipmunk. (I know, bad bad bad) I guess a good rule of thumb is what I've put in the public documentation. If it's not there, then I've considered it unimportant to the end user or an implementation detail (that may change in the future and break things).
To the first question:
I guess I've never really considered a cpSpace to be a container. All my Ruby code is fairly MVC-esque so I end up storing my own list externally anyway. I actually consider what I did with the demo to be a bit of a hack, the simplest possible way to get a Chipmunk space on the screen.
To the second question:
I don't believe I've ever written a CP::Shape::Poly#verts method. Did the ShatteredRuby/Chipmunk folks add one? I actually don't have accessors for attributes on any shape type. Again, in my Ruby code I always have separate model and view objects anyway. Shapes as well weren't really meant to be transparent, simply an internal representation for Chipmunk to use.
The thing is that doing what I do in the demo app just isn't scalable beyond drawing simple outlines of all the objects in the space. I wouldn't really recommend it for any sizable project.
I threw together a simple set of subclasses that should do what you want. Adding that to the actual extension would be a lot more tedious. Is this an OK compromise? I guess I could add it to the extension if people really, really want that.
http://files.slembcke.net/temp/chipmunk_proto.rb