Once you uninjected, you should be able to rename the hook dll. Then you can copy in the new version of the dll and re-inject. You can do MoveFileEx to delete the renamed (still in use) file, but no instant reboot is needed. Of course the renaming should be clever enough to support renaming to multiple different names, so you can replace the dll version more than just once without a reboot.
Alternatively you could add a version number to the dll name, then you don't ever have to rename it.