For synced simulation, I'd keep that all in one thread, syncing multiple threads will be a HUGE PITA, and I mean really huge.
However, what you can do, and what will probably help quite a lot, is split up the ProjectileHandler into a SyncedProjectileHandler and an UnsyncedProjectileHandler (I once made a start with that by moving the projectiles in separate directories, see SVN).
Then you can keep the SyncedProjectileHandler in the single sim thread, and run the UnsyncedProjectileHandler safely in a second thread. (And sim could produce new unsynced projectiles using consumer/producer system too.)
Since a lot of projectiles are unsynced (and probably quite much are synced but could easily be made unsynced, hint hint

Also feel free to factor out Sim GL calls, since ideally the sim doesn't do any GL calls at all.