The code handler sits in the reserved area of memory, 80001800 to 80003000. However, the C array that the code handler is "stored" in (codehandler.h) is 0x10C0 bytes. That puts the end of the code handler at 800028C0 - which is precisely where the code list begins. The code list then consumes the remaining portion, from 800028C0 to 80003000.
The space isn't so much "moved", as it is "reduced" or "pushed back". If I added 0x40 bytes of patches to the code handler, then I would push the start of the code list back to 80002900. Technically I would be over-writing where variables are *supposed* to go, but it doesn't depend on the initial values and it wouldn't write to anything above 80003000. It just means that the debugger would have fewer code lines to work with, which is already true when Gecko.NET connects. EDIT: on second thought, this would also break SD Cheats, because the code list wouldn't be where the loader expected it to be. This could probably be worked around with gameconfig.txt
I'll have to try manually splicing a new code handler in with a hex editor. But none of this answers why I couldn't find the code handler in Gecko OS' dol or elf files. Is there some sort of packing that can be done on homebrew executables?
There are .dol compressors in existence; one of them is at
http://www.fuzziqersoftware.com/projects.php . So yes, that could be the reason why.