User Experience Is Key
Actually it's pretty simple why slack is winning - user experience.
IRC has a terrible user experience in most every client.
The I and the R are well enough covered, but the C part, for Chat - that's been a bit neglected over the years. In 1995 it was awesome. Then ICQ, AIM and MS Messenger came along. Did it evolve? No. Then XMPP clients, Facebook Messenger, etc. Did it evolve? No. Then it was HipChat and Slack for businesses. It's still barely noticed the competition. All the ideas coming _from_ IRC were taken and used in evolving chat tools. But none of the improvements that closed source tools made were incorporated back into IRC.
Communication is the most important thing about a chat tool. That's what chatting is. Anything that reduces that friction will win huge market share, because everyone communicates, all day, every day. Anything that makes that more difficult or harder will be lose market share.
People expect a great user experience these days. I write software in several languages, am involved in open source projects, though nothing big. Do I want to spend my very limited free time on wrestling with IRC's idiosyncrasies, setting up servers to get a persistent chat history, hand hold users through doing basic things like sending files, or setting up integrations to cloud services? No, not really. None of them add value to my projects. I want to focus on communicating ideas, and collaborating.
Slack is an awesome chat tool. It is not perfect - it has occasional connectivity problems, it didn't develop threads until a month or so ago, and they don't work perfectly. But it has an AWESOME user experience. It's the best chat tool I've ever used, by a long margin.
Our company uses it all day every day, for 500+ employees to communicate. It's replaced almost all email communications. It lets you start video chats from many services with a / command. It's trivial to add github notifications, build webhooks for deploys. It encourages in channel communications by keeping history, and it encourages user engagement by allowing most people to customise most things, including emojis, and integrations to other services (we allow most users to add their own slack webhooks).
All of that time we save - it can be used on our actual product. Which is what the communication is for in the first place, right?