That’s not as crazy as you think. In fact, you can achieve this using AppDomains.
Each AppDomain has its own storage location for static variables. So you can just create a second AppDomain in your process, and communicate between them using an object that inherits from MarshalByRefObject like in this MSDN example.