...in my mind i was referring to hot swapping the exact same DLL during runtime...
Ah, I get it.
It's been a while, so I don't know for certain, but it seems like the running program shouldn't be holding the dll file open after it loads it. If not, you should be able to overwrite the file after it's loaded. Then you could have the engine periodically check its modified date, and initiate swap proceedings when it sees that date change.
With a little attention to data handling and architecture you should be able to update lots of different systems on the fly without restarting the engine. You could also choose to load dlls only in a development build, and link to static libraries for a release build.