I thought about writing a tool that modifies the EXE at runtime, and it just has a table of byte offsets to overwrite.
That might be nice, but the problem is that I'd need to edit the EXE to do that, and if I'm editing it once I might as well do it all as edits.
I just can't think of a graceful way to put it in big .asm file, even with macros.