It isn't, actually. The proof of the undecidability of the halting problem is rather straightforward. You just assume you have a program that determines whether or not its input halts or loops. Then you write a program that uses your assumption as a helper and does the opposite:
If the input halts, then loop
If the input loops, then halt
You then pass the program itself as input to itself and you get a contradiction.
If the input halts, then loop
If the input loops, then halt
You then pass the program itself as input to itself and you get a contradiction.