1. Racket should obviously use S-expressions as the one-and-only data structure. That's where we come from, and we're different that way.
2. I played with the idea of gluing code like that together some 10 years ago. The idea was to glue together units (no modules yet) where on one side you use lists to represent records and on the other you use generic structs. With the proper unit signature, you can actually do this -- as long as the unit adheres to the struct-like discipline.
With types it might be possible to introduce this discipline on an 'assisted' basis. Say you have a unit that you want to structurize. You would change representations and the test suite plus the exceptions of the structure would guide you to the places where you mix representations. A Spidey-style type analysis could make this look better and perhaps better by default.