I'm not sure if this is what Verte means (if so slap me), but can't you overwrite the original opcode (the one you overwrite now anyways) with an unconditional jump to your instructions and at the end of your instructions unconditionally jump back to the opcode after the one you've overwritten? In that way you only need to replace 1 opcode and don't need to call anything else...
If I read it correctly you want to do:
original opcode 1
original opcode 2
original opcode 3
original opcode 4 \ replaced with other opcode and jmp to your code:
original call wherever / line1: blahblah
original opcode 6 line 2: blahblah
original opcode 7 line 3: original call wherever
But can't you do:
original opcode 1
original opcode 2
original opcode 3
original opcode 4 -- replaced with only a jmp to your code:
original call wherever line1: blahblah
original opcode 6 line 2: blahblah
original opcode 7 line 3: jmp back to '
original call' line
If I'm talking gibberish, than it maybe is, so ignore it in that case
PS: all this can be done from within Plus! scripting itself though, you don't need any DLL for this, only your compiled ASM code (as a byte string) which you're injecting and the CallWindowProc API.
All this makes me also very curious to what you're brewing