If you want a swap n go mechanism in your engine in general the pervisous writers are right, you then need LoadLibrary function in it. But to get this working it is a design question of how you build your engine modules to make swap n go working, managin threads carefully to not run into null pointer exception when calling a module swap and so on. You also need some kind of abstraction layer to bind your functions to.
The other section is the resource one. Shaders may be saved in some graphics APIs and then reloaded that has nothing to do with macros because they were loaded when you have swapped your code so to restore them should not be the problem. Textures and anything in memory needs to be reloaded when swapping except for non-pointer or straight strict pointer addresses e.g. pointing into a memory bucket you handle by your own. A memory manager could also help because you are able to serialize it to disk and reload it after you restart the app.
I have also written some kind of reflection for my engine capable to call functions and set fields on existing objects I use for realtime editing when testing gameplay.
There are bunches of possibilities you may use but anyway it is a design question