Because the x86 architecture was originally 16-bit, it then evolved addendums as it had to address more and more memory, and work with larger and larger registers.
The layout wasn't changed for various reasons:
Maximising compatability with other vendors in order to steal their customers.
Maximising compatability with operating ...
Easiest would be to conserve all addresses, not shifting code around.
If the replacing patch is in equal size there is no problem.
If the patch is smaller you can padd with no-ops, no-operations.
If the patch is larger, you can add the patch at the end, and insert a jump to it,
with at the end of the patch a jump back.
In reality there are relative and ...