I apologize no one has responded to you until now. Please don't assume your son hates you. I can guarantee you that he still loves you. The problem you are both encountering is how to find some common ground now that he has become a young adult.
First, I just want to shed some light on the Facebook incident. No young man wants his roommate to "friend" his mother. It was a very odd thing for the roommate to do and your son's reaction was pretty normal. He has to live with the friend. He isn't living with you. So, it was easier to vent his anger on his Mother. It definitely isn't right or fair of him to treat you that way, but it is understandable for a young adult male his age to react in this manner. I explain a bit more further down.
Second, Thanksgiving. Okay so you wanted to show him where you work. He said he didn't have the time. You tried to make him feel guilty. Unfortunately, it backfired on you. Next time, leave the guilt trips at the doorstep. Guilting him will only accomplish driving a deeper wedge into the communication problems you are experiencing with each other.
Third, please don't assume that he prefers to spend time with his Dad. He probably doesn't particularly enjoy his father's visits but at least he gets to go out to dinner and eat some fine meals (instead of the crappy school food or whatever food he can find on the cheap) and probably gets cash out of his old man to boot. Don't think for one minute that your son is judging you on how much you can give him as opposed to how much his father gives him. Guaranteed he knows you are on a tight budget and doesn't resent you for it. This all has to do with how the dynamics of your mother-son relationship is changing, you didn't realize you needed to prepare for it, and now don't know how to approach it.
Please understand that your son has one foot in childhood and one in adulthood. Over the past few years he has been learning to live independently from you. He will continue to be short, impatient, and selfish. Although he won't recognize it himself, you need to recognize that he lacks maturity and the ability to be emotionally supportive of his parents. Only time, experience, and age will cure that.
Yes, you need to visit him. Find a way. Please reread the list of reasons you haven't visited him from as objective a point of view as possible. I don't mean to be harsh but it reads as a list of excuses to me. So, you do need to find a way to visit him. I know it is a long drive and money is tight, but you do need to visit as often as you can (take short trips so as not to overstay your welcome -- leave early in the morning, stay overnight, leave the next afternoon so you can be home by the following evening) because it is the only way you and your son can move into the next phase of your relationship --- interacting as adults with a give and take exchange, not simply as parent/child -- before he moves further away from you and the wedge grows deeper. HOWEVER, when you visit, don't be surprised if he acts as though you are inconveniencing him. He will act embarrassed and annoyed in front of his friends because they all do that. It isn't cool to be happy to see your Mom and want to spend time with her. It takes a very mature & self-assured 22 year old or a complete mamma's boy to show his affection for his mother in front of his buddies. Just know that although he won't show it, deep down he will be happy that you cared enough to show up and see him.
I don't know where he goes to school but usually the campus administration has a public relations office or a liaison office for visiting families. Call and find out who you need to speak with regarding suggestions for inexpensive hotels, dining, and entertainment that you and your son can enjoy together. You might also want to check the school's website. They usually have a "things to do" section for visiting high school seniors and their families and they usually have a calendar of planned events. Plan ahead and try to come up with an itinerary or a number of different ideas/suggestions for entertainment that you think your son will be interested in. Make sure it is not something the 12 year old boy you knew would want to do but what an adult would enjoy. Then contact him. Tell him when you are coming to visit & what you are planning for an outing. If he tells you the timing is wrong, press him to give you dates in which he won't be inconvenienced. If he tells you he doesn't want to do any of the things you have planned, ask him to come up with suggestions because you miss him and, "come hell or high water," you are coming to visit to spend a little time with him. Unless he screams at you not to show up, do not let him talk you out of the visit. Showing up and being a mother & friend may seem to annoy your son and he won't admit he is happy to see you, but he will be. As I said, he still has one foot in childhood at this age. Not seeing & interacting with him on a regular basis appears to have made the child that still lives inside of him believe you don't love him enough, no matter how much you tell him you do and that he is your hero, or whatever else you say to him. Remember that old expression "actions speak louder than words?" This is a time of action for you. Show him how much you love him by spending time with him doing the things he wants to do. Show him you are flexible and are interested in whatever he is interested in, even if you aren't. Go that extra mile to show him that you are not only his mother but you accept he is an adult and you will treat him as such. Make him want to visit you after he graduates (and moves further away) by showing him that you do have common interests and you are someone he wants to spend time with.
Regarding keeping the conversation flowing while you are visiting, start writing a list of questions you have for him about his future plans or dreams, about how his semester is going, the classes he is taking, which ones he likes, which ones he doesn't like, what are his friends plans after graduating, is he planning on working this summer, what he is doing to find work, or what his plans for graduate studies are,. Make a list of current social and political events that are occurring and engage him in a dialogue by asking him what his thoughts are on these subjects. My point is, plan ahead. Think about what he enjoys talking about and make those things the jumping off point in your conversations. Whatever you do, don't offer unsolicited advice! Steer clear of judgements or anything that might remotely sound like you are trying to guilt him in any way. In other words, try to table the "Mommytude" that will be itching to break out of you!
Just listen to his reponses and talk to him as you would talk to another adult you have just met. If you fully prep yourself, it will help you to make the conversations flow and not be as stilted as they have been recently. In the end, you just might find that the visit will be the fun little vacation break you needed. Good luck!