If you have something TCP-based, it's usable only by non-web clients. If you have something WebSocket-based, it's usable everywhere.
Edit: An additional consideration: WebSocket is a nice, message-based protocol with easy-to-use APIs everywhere, unlike the stream-based TCP whose usual API (Berkeley sockets) is rather more difficult to use.
Socket.io is useful when you have legacy web browsers that may not do websockets. Beyond that, it does not bring much over regular websockets.
Not on the web it isn't.
I agree that socket.io offers little over WebSocket except for backwards-compatibility, but the OP's question was more about why you'd want to use WebSocket.
Maybe someone should write a TCP socket implementation for the browser instead of trying to re-implement the transport layer on top of the application layer.