I really don't get what you're asking.
If you're talking about function pointers, void (*foo)(void); foo = realfunction; foo();
If you're not then you can't just copy blocks of instructions around. For one thing you've no idea where the function ends. Most instructions have hard-coded addresses in them, any given function will have both relative and absolute addresses. Even in PIC code, the data address is typically calculated relative to the instruction pointer. Change the instruction pointer and you change the data address too, and that's not something you want.
If you want to generate native instructions yourself then by all means do so, but this of course requires that you know how to write out the correct addresses in each instruction that you use. Either way, you need full control over the instructions and the addressing used. A C compiler doesn't give you that sort of control, you'll only get that from writing the instructions yourself (either via asm, or via C code).