In my experience, no. Most modders can't be bothered to learn even the basics so they can use DFHack more effectively.
That said, even if we all knew how to program it wouldn't help much for this topic, as no one has access to the DF source code.
Now some problems with your first post:
... starting a new thread for each creature every time they need to path to a new place.
A very bad idea. You end up losing lots of time creating and destroying threads. It would be much better to have a fixed size pool of pathfinding thread that are reused as needed.
Is that enough data that it is prohibitively expensive to make a copy and pass it to the new thread each time a creature has to pathfind? I'm imagining that the main program saves a map network every ten frames or something, and each thread takes its own copy of that updating-every-10-frames network so that it can keep working even across refreshes.
When you have a problem like path finding you don't want to work with a copy of the data, you work with the data itself concurrently with something that does not need to change said data. In this case it would be better to save "change commands" listing what needs to change during the update phase, and flush them all in one go after locking the map structure.
Basically you run the pathfinder in one or more threads, and the functions updating units, etc in other threads. Once all the update threads are done you lock the map and resolve all changes. If possible you do this several times so you pathfinding doesn't have to wait for items to finish, etc. Basically each thread does it's thing, then locks the map and flushes all of the changes it needs to make all at once. This way different update functions block each other as little as possible.
You haven't done much with multithreading have you?
How long is too long when it comes to pathfinding algorithm execution time? If the main game logic were running on a different thread from pathfinding, how many frames of game time are too many between a creature starting to pathfind and obtaining the correct route?
1 frame, because if it takes longer than that to find a path you are doing something wrong. Remember, the whole point to multithreading is concurrency, path finding should happen at the same time as the other stuff. Games can be designed to allow path delays, but it wouldn't work well with DF because the map can change and destroy all your work, wasting time. Better to get it right the first time.
Multi threading a game like DF results in it being split up something like this:
* Start updating everything that does not change the map, which is just about everything except units, water/magma, tree growth, and a few other bits and pieces. This would be a long running thread that basically consists of a loop that starts the next iteration at the beginning of every frame and runs until it finishes one update cycle (the frame cannot end until it is done).
* Start a thread updating the units. This should do a quick pass to queue up path requests first, then go back and do a more detailed update when the path request part is done.
* Update that map tiles. This is done in the main thread, as it must be done before pathfinding can begin. Keep in mind that units are queue path requests and any non-map stuff is updating while this happens.
* Wait for the unit thread to signal that path requests are all ready. Hopefully this is just finishing.
* Tell the path thread(s) to go ahead. Paths are calculated ignoring units, as they are handled later.
* Wait for paths to finish.
* Start moving units, if a unit will move through another unit try to run a very short path finder to see if he can go around to rejoin his original path (no more than ~5 steps), if this fails just crawl over/under each other. This is done in the main thread. BTW: you should keep track of how many times the "avoid unit" pathfinder triggers for a specific path, if it gets to 3-4 times in quick succession then try to move half way along the detour and recalculate (this would have the effect of allowing units to walk side-by-side if possible.
* Go to the next frame (waiting for the non-map update thread(s) first of course).