The SDK is a strightjacket. You can do this with frame scripts, which are content scripts added using a non-SDK API. By default, frame scripts run in their own namespace, but you can set an option to have them share the global namespace and then you can easily share globals. Otherwise you have to establish communication via messages. Content scripts are essentially the same except that you can’t reasily control whether they get their own namespace. One exception is that all content scripts loaded in the same tab.attach share a single namespace!
So you have several types of message available. Perhaps the simplest is to send custom DOM events. These will be available for any script to listen on. You can also send messages using the SDK API (port/emit or post/receive). That doesn’t in itself give you shared access to shared objects, since the payload is copied, but it might be enough for you.
A sneaky way of sharing a generic javascript object is to attach it to a DOM element. Since all the scripts in that content process can see the DOM, they can all find the object. Note that page scripts won’t be able to see the object for security reasons, but you can use the unsafeWindow object to do some sharing between content and page scripts.