After 5 days of chatting with Heroku support, I've solved the problem. Kind of. Heroku websockets just weren't working. I tried everything. So I finally decided to try OpenShift. I had my app (the same code that wasn't working on Heroku) working perfectly on OpenShift, with websockets and everything, in only 2 hours.
I highly recommend OpenShift to anyone who is looking for free and stable Node.js hosting with WebSockets. Their CLI is just as easy to use as Heroku's, and they give you 3 gears (512MB each) for free!
Here's a couple tips for using Node.js WebSockets on OpenShift:
Use these variables for the server ip and port:
var ip = process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1";
var port = process.env.OPENSHIFT_NODEJS_PORT || 8080;
But your websocket client should connect to:
ws://app-domain.rhcloud.com:8000
or
wss://app-domain.rhcloud.com:8443
(for secure https connections)