I really had no idea any of this existed before writing mine, and so far people have pointed out several instances of this applied to consoles (which I haven't explored at all), but none about PC games. I wonder why is this? Do consoles have higher-level APIs you can hook into that makes this more reusable across games - more similar to adding hooks to a game engine vs an individual game in the PC world?
Well, having a game under emulation gives you more control over what you can do, certainly. You now control the software and hardware. But I think most people also don't want to make enhancements that only work on a single emulator. And getting emulator authors to cooperate is like herding cats (which is why we are still using the woefully inadequate iNES header format in 2014.) So I could have made MSU1 run some 1080p video mode with a 2GHz simulated x86 processor, but it was important to me that the protocol be as simple as possible and exist in a physical implementation that worked on the real system.
More along the lines of your example, my emulator core is completely abstracted to its own library and is GPL, so it would be quite easy to hook routines as you have to do things like hires textures even on the SNES. But there are some more extreme challenges to that than just identifying key functions, as the SNES renderer is very elaborate.
I can't say I've specifically enhanced PC games, but I've definitely worked on translations of them from Japanese to English. There's definitely lots of fun tricks you can do outside of emulation, still. I usually write a debug process launcher that uses DLL injection, which is then followed by installing trampolines in various functions.
We worked on a game called Heroine Anthem, where the movie file format was entirely custom. So we ripped the movie with screen capture software, subtitled it, encoded it to XviD (this was a while ago), and then ran our own DirectShow window to play back the movie in place of the originals.
We also patched an online multiplayer game, Fuurai no Shiren, to add a new dialog to configure the server you connect to. We reverse engineered their protocol (their "encryption" was a strtr function on streams of hex values. Quite laughable.) and then created our own PHP server, called OpenShiren, so that people could run their own instances. Especially useful once Chunsoft shut their servers down.
I've done far, far crazier things with manipulating others' applications, but since they weren't games, I won't elaborate on those here.
There is a PC remake which follows similar approach: Abadia Del Crimen [1].
The author worked with the original binary to maintain the original logic of the game. The game first was converted from CGA to VGA and then he wrote a translator to covert the the original 16bit DOS code to 32 bit Windows with DirectDraw and DirectSound using only assembler all the time.
I really had no idea any of this existed before writing mine, and so far people have pointed out several instances of this applied to consoles (which I haven't explored at all), but none about PC games. I wonder why is this? Do consoles have higher-level APIs you can hook into that makes this more reusable across games - more similar to adding hooks to a game engine vs an individual game in the PC world?