Showing semidecidability without using diagonalization
Your question is a bit hard to answer, since &quot;diagonalization&quot; is not a formal concept (but see below). For example, does the following argument count as diagonalization? Consider the following function: $f(n)$ is the first string not generated by the first $2^n$ Turing machines. If the halting problem is decidable, then $f(n)$ is computable, and so its Kolmogorov complexity is $O(\log n)$. However, by construction, its Kolmogorov complexity is $\Omega(n)$, and we reach contradiction for large enough $n$.
One thing which is common to this proof and the usual one is the use of proof by contradiction. What happens if we disallow proof by contradiction? Can we prove that the halting problem is undecidable in constructive mathematics? I don't know the answer, but if it is negative, then this explains why proof by contradiction is necessary.
Another relevant piece of information is relativization. The halting problem is undecidable even relative to an oracle. Therefore, there should be an undecidability proof which uses only relativizing techniques. While this does not imply that any proof uses only relativizing techniques, perhaps it means that the &quot;best&quot; proofs should use such techniques. The advantage of this point of view is that it gives a slightly less informal definition of diagonalization, namely, any technique that relativizes.
Finally, let me mention that Kozen formalized the concept of diagonalization in his paper Indexings of subrecursive classes, and showed that every separation of complexity classes (subclasses of computable functions) can be proved by his notion of diagonalization. In his setting (which doesn't include undecidability proofs), diagonalization is the most general type of proof, which can prove all true statements. This means that any proof at all (of such statements) can be cast as a proof by diagonalization.