I worked on Itanium for about 12 years - I designed circuitry for McKinley, Montecito, Tukwila and Poulson and then post-silicon debug of most of them as well.
My understanding of the key reasons for Itanium were that it would use the latest-and-greatest architectural and compiler techniques to improve performance - and people in this thread have mentioned this - but the other reason as I see it that I rarely see people mention is that it was supposed to be server-class CPU built from the ground up to be a server CPU to allow Intel to get into the high end server market. You might reply, "but, hey, Patrick, that makes no sense because Xeon sells really and it's an IA32-based CPU so why would Intel think it needed to make a special CPU like Itanium to get into servers?" but that's looking back from the position of seeing how history turned out.
At the time in the early (and mid) 1990's, the server market was dominated by RISC - the supposed successor to CISC (ie. a name for the type of instruction set in Intel's IA32 CPU line) - and Intel was having a very hard time selling into the server computing segment. It's hard even for me to remember but servers were dominated by RISC CPU's running on proprietary platforms with proprietary OS's (Solaris, HP-UX, OpenVMS) Itanium, as I see it, came out of an idea of trying to move into that segment by having an even more advanced architecture than RISC, both from a perception standpoint ("RISC is so yesterday..."), but I know as one of the people who worked on it, we thought it was going to be much more than just perception. So it was designed to be a server part and this would enable Intel to move into servers in partnership with several leading server vendors and it was planned to be a very high-performance part.
As Nemesis said, Itanium sales are still respectable. As an engineer, I enjoyed working on Itanium and I remember the first power-on of the Intel 9300-series as being one of the coolest things that I've done in my whole life. The recent launch of the Intel Itanium 9500-series (Poulson) in Nov. 2012 is proof that despite everyone saying it's dead... it's still very much alive. But perhaps I think even the engineers who worked on it will admit that it didn't quite turn out like we thought that it would.
Back to the original question about what in theory makes IA64 superior to x86, well, things that I can think of off the top of my head: there are 6 semi-dedicated registers in x86, and there's 128 general purpose registers in IA64. So in x86 you are limited in what you can do in each of the registers so when you are writing assembly code, you have to move things to different registers to do different instructions, but in IA64 you have lots of them and you can do anything you want in any of them. x86 has semi-restrictive stack-based floating point registers, while IA64 has 128-bit non-stack-based registers. So you have to load and unload the stack in x86, but in IA64 you don't have to do anything like this. Then IA64 has this concept of an instruction bundle which makes it easier to write code that is meant to run in parallel by design, it has a bunch of stuff to help branch predictors be more accurate, it has stuff to help preload memory so than you can put things into memory before you need them (parallelize the loads), and there's things to run parts of both branches so that you don't suffer branch prediction penalties as much. Some of this stuff has been added into x86 in newer instruction sets like SSE and new instructions on newer processors, so to say x86 doesn't have these isn't strictly true any more, but at the time that IA64 was conceptualized, x86 didn't have many of these things.
* As always my views are my own and I'm not a corporate spokesperson for Intel *