The hook is what I place in the hijacked routine so it jumps to my hack. And you need the full version of ida indeed, come to the irc (chat link in my signature) and see if Touched is online, he can help.
You still seem to have some trouble understanding pushing and popping. I don't 'call' any registers by pushing lr, and pushing lr doesn't execute anything; neither does it 'pop information back'.
The stack is simply a big chunk of free space used for temporarily storing things. If you need to backup the value of a register, you can push it to the stack, do whatever you want with it, and pop it afterwards to restore the previous value. When a routine uses a bl to go to another routine, the address it should return to is put in lr. Because I also use a bl inside my routine, I need to save the current return address on the stack. When I'm done, I simply pop the return address onto r3 and bx to it, thus returning to the instruction after the previous bl. If I didn't modify lr, I could've just used bx lr at the end.
There also is a standard within the game that makes it so that any subroutine that's called from another routine may overwrite r0 to r3. That's why I don't push them. R7 is only checked (damn this routine really used an ugly and hacky way to see if it is a poke and may actually be bugged, I'll need to check in ida later today), not modified, so there's no reason to push it again. And something probably made me think back then that r10 would be overwritten after returning to the function that called this one, so it is safe to use too in that case (I do need to confirm this).