Well, to begin with, while you could pass LoadLibrary et al to the game as function pointers (not sure why you were getting a linker error, it was probably something else going on), I would point out that that would immediately make all the game code not be cross-platform because now it relies on passing a pointer to a Windows internal function. So if you were somehow going to go that route, you'd want to pass a generic library loading routine and a generic function loading routine that you implement with a known signature that then calls LoadLibrary on Windows, but other things on other platforms.
However, that too is a little risky, because what name do you pass to LoadLibrary? The dynamic libraries for the graphics layer will be different on different platforms, etc.
This is generally why rendering (and other hardware-dependent things) want to live in a middle layer between the platform code and the game code, because they typically do depend on something, even if that something is not the OS but rather the particular API (OpenGL or Vulkan, whatever).
If you want to allow these things to be hotloaded, I would recommend treating them as a separate translation unit, just like the game, and pass all the functions they need to them, etc.
- Casey