One experiment that might be interesting is to create a compiler pass that rewrites all property references so they were all external:
x.a --> x['a']
x = {a:1} -> x = {'a':1}
These quotes are already dropped post-optimization, so there is no additional cost (over simple). Likely, we would want to leave "prototype" alone, but otherwise the rewriting is dead simple (GETPROP becomes GETELEM, all object literal keys are tagged as quoted), and prevents the need of having a new optimization level.
Variables would still need to be exported, etc.