P1 Perhaps you can somewhat avoid self reference in this way.
Let $S_k$ be the total number of steps performed by the halting Turing machines of size $\leq k$ in their computation.
Suppose the Halting problem is solvable, then $S_k$ is computable and exists a TM $M_S$ that on input $k$ enumerates the Turing machines of size $\leq k$, for each one of them check if it halts, if it halts simulate it step by step and keep track of the total sum of steps.
You can build a "small" $M$ that:
- embeds a number $n$ in binary format
- calculatate $2^n$
- apply the $M_S$ "function" on $2^n$ and calculate $S_{2^n}$ using the method above
For large enough $n$ we have $|M| < 2^n$, but this is a contradiction because there is a Turing machine of size $<2^n$ that halts after a number of steps greater than $S_{2^n}$.
P2 Another somewhat obscure proof could be:
You can build a TM $M$ that checks if there is a proof of $A \land \lnot A$ in Peano Arithmetic (enumerating the valid proofs), and if it founds one then it halts.
If the Halting problem is solvable, you could be able to prove the consistency of PA within PA itself, which is a contradiction of the second Godel's incompleteness theorem.