I've been working remotely since September of 2011, and I've gotten questions both from coworkers and acquaintances about how to overcome some of the challenges.
I don't think I really know how - from my perspective, it revolves highly around the personalities of the people involved, and the established culture of a company.
For myself, it worked best when I worked in 100% remote companies. There was no office for people to go in to, and thus all communications were funneled through emails, IRC, the bug tracker, and VoIP/video chats. No fallback to rolling your chair over to the other cube was available.
This is both good and bad. Good because it means that there aren't necessarily the distractions of other coworkers constantly interrupting work, which for programming can be pretty bad for maintaining flow and being productive. Bad because it means that you as a worker need to keep yourself more disciplined if you're working at home with all your home distractions, as well as monitoring yourself for things like burnout and getting stuck on a problem where you need help.
As a remote worker, you need to be comfortable with raising your hand and saying, "I need help with this," or "I'm frustrated, can we talk?" If you don't, others are going to have a much harder time picking up on it than if they see you in person getting mad at the computer or whiteboard. For myself, I think this has been the hardest part. I'm very much an introvert, and though I like to bitch a lot on twitter, I have a hard time catching myself when I feel burnt out and actually communicating that to others in order to get help.