Not that hard, if you don't care about two things:
- Typing latency
- Access from mobile devices
Many people don't care about those things; good for them. Unfortunately for me, I do.
I can (and do) use a bouncer, which theoretically solves both problems: text entry is handled by my local IRC client rather than every keystroke going through a server, and I can run an IRC client on my phone. Unfortunately, bouncers are a rather poor approximation of true cross-device history/state synchronization; e.g. they don't sync unread messages. And they're generally slow and fiddly for various silly reasons. For example, most bouncers require you to make a separate connection for each IRC network, which is slower, and requires configuring each client device for each network, annoying if you have a lot of networks. Also, long backlogs can overload slow IRC clients, but typically the alternative to long backlogs is losing history, since there's no standard mechanism for clients to request history on demand.
There are also some IRC clients that do "true" state synchronization, like Quassel or Weechat's relay mode, but none with a tolerable iPhone version, last I checked.