Could it be because of the age of the codebase? When ICQ started the available TCP/IP stacks were not good enough and it doesn't make sense to refactor the whole project to use the system stack.
Yes, that's mostly true.
In early days, native TCP/IP stacks wasn't good at handling so many simultaneous connections as ICQ needed to handle.
So AOL just wrote their own TCP/IP stack (I think they used this implementation not only in ICQ).
In modern days, it's legacy.
I think they already removed this stack since I left company.
Mind expanding a little bit why is that?