I am facing a similar situation but do not have access to locks or Mutexes and the code I am working on is guaranteed to be single threaded.
How do I create a mutable global hash map?
"guaranteed to be single threaded" is something that you are asserting, but which the compiler has no way to prove. In this kind of cases, you need to use unsafe code.
static mut used to be the standard answer to this kind of problems, but it was recently realized that it is almost impossible to use correctly in Rust (because aliasing of &mut is UB), to the point where the lang team seriously considers deprecating it nowadays.
What you want instead is likely a newtype of UnsafeCell, that implements Sync so that you can use it in a static. There have been discussions of providing such a newtype in the standard library as part of the static mut deprecation process (it would be called RaceyCell or similar), but that hasn't been done yet so you need to roll your own.
Oops, missed to see it. Then in that case lazy_static can't help. You can use Rc<RefCell<YourType>> instead and pass them around, since it can not be instantiated using lazy_static, since lazy_static requires thread safety.