Actually, a virtual machine CAN coerce an executable into doing something else. It requires detailed knowledge of the assembly though. Once a certain function is hit, you can track that with the instruction pointer, have the virtual machine run its own set of functions (to replace that function), set the instruction pointer to the end of the function. As I said before, its a hack, it requires knowledge of the assembly, and it would require huge memory mapping efforts after every release, which isn't terribly different from DF hack, except the scale would be much worse.
... One clear candidate for a separate thread is the calculations for events external to the fortress (at least in fortess mode) since they have a very small interaction with the fortress itself (probably only diplomat/liason reports) and thus should have a limited need for multiple access protection and separation, another one is graphics, a third one is equipment wear, and a fourth is liquid flow and temperature calculations (there are probably others as well)...
Your suggestion...
Although graphics are already multithreaded. Certainly the active world is a good candidate, I never particularly agreed with equipment wear. Pathfinding, liquids, and temperatures could be done, they would just use, an already shared resource, the map. Of course it doesn't prevent all issues, there would need to be protection to prevent data races, but it seems we already have a lot of those problems with dwarves not checking their path through flowing water. And how amusing would it be to see a dwarf try and path through a hallway, only to find the path was blocked by a wall, and force him to recalculate?
Having worked with multithreading, you can and will run into those issues you mentioned, but sometimes it is actually simple enough.