IRC ignores characters sets while jabber always uses Unicode and clients map appropriately. On Jabber, München is München. On IRC it's MÃ¼nchen or M�nchen sometimes and each user has to do manual configuration to reduce the number of errors. Ridiculous.
Jabber has stable names, while IRC has arnt, arnt_ and arnt-. On jabber there is no need to type /whois arnt to check whether a message will go to the right arnt. As a pleasant bonus, it's possible to use the same address for jabber and email. (I won't say it's easy to configure that, though.)
Jabber's new features are standard, and work the same way with every server, and there's documentation saying how they work.
With IRC, there's RFC 1459 — now only of historical interest.
Take password protection as an example. Jabber servers and clients, like all real software, treats login as an integral feature. IRC doesn't. Some networks have their own hacks and tell users to use ircii's scripting facility to log in.
Jabber supports cut and paste. On IRC I could get kicked for
pasting ten lines, on jabber it is just one
line, as well it
should be. And a / at the start of a line won't destroy anything.
Jabber is open, IRC is full of walled gardens. The client I use has a list of more than 50 IRC networks. IRC reminds me of email 20+ years ago, when compuserve addresses couldn't speak to X.400 and X.400 wouldn't speak to UUCP addresses. Disgusting.
Is he done speaking? With IRC two people can speak
to each other at the same time. Jabber improves on that by letting you
know whether your peer is currently typing a message to you or waiting for
you to say something.
With Jabber, all participants in a groupchat see the same remarks in the same order. Not like IRC, where server topology often causes people to see remarks in different order.
Jabber is more robust. If a jabber client loses contact with the server and reconnects, the server will generally repeat the last few lines so the user doesn't have to bother any humans with performing this chore.