I don't think there are any easy answers but there are a some things you could try.
A good strategy is to offer lots of positive reinforcement for good/acceptable behaviour and as little reaction as possible for the bad.
This takes a lot of effort because you need to praise and thank him for every little thing you can think of. It can be very tiny things like asking nicely for something, saying thank you, sitting nicely at the table, putting his coat on bby himself, etc. They don't need to be things he finds challenging, just things you like him to do and that you can show appreciation for.
This should have two benefits. It will allow him to feel showered with attention for good behaviour and therefore his self-esteem will be boosted and he'll not need to get attention by doing anything unacceptable (not that I'm suggesting this is an issue). It will also give him very clear messages about what is the right way to behave in certain situations if he was in any doubt. Children often on hear when they've got something wrong and have to assume that if they weren't pulled up about something it was ok.
Another suggestion would be to be very clear that you mean what you say and don't have any battles that you are not prepared to win.
If you can't use your strength to get him in a car seat and you really have to be somewhere you could use bribery. Allow him to see something he wants and tell him he can have it as soon as he is in his seat. This will only work if you are very consistent so he knows that the only way to get it is to cooperate. If he doesn't cooperate he doesn't get the treat no matter how much he tantrums. If he does cooperate take a few moments to offer praise alongside the treat.
If you think you are not consistent enough now you can change it but it will be a shock to him and hard work for you at first. Children generally only continue to have tantrums if they achieve the desired result. Be very firm and clear in your decisions, stick to what you have said and pick your battles carefully. Don't go head to head over everything so only say no when you mean it and when it's worth it.
If he gets away with things when you're out because you are embarrassed by the tantrums then warn your friends beforehand so they can support you. You shouldn't have to do it too many times before he gets the message.
He is also old enough to learn from natural consequences so if he refuses to eat he can be hungry until the next meal or return to the table to eat what was already on offer when he's willing to sit and eat politely. If he refuses to put a coat on he will be cold when he goes out and soon change his mind. At times like that you can withdraw from the battle of wills because the natural consequences will do your job for you. All you have to do is remind him of why he feels cold/wet/hungry/.... while remaining calm and far more concerned with other matters.
When meeting friends I would simply ignore his rudeness and ask them to do the same, offering him positive attention when he decides to be polite. If he chooses not to speak that's a good way to cope with social anxiety so support him in making that choice. On occasions when he does greet someone appropriately thank him for being so polite and making you proud of him.
Oh and the suggestion above about keeping him informed of plans is a very good one but, again, if you've told him you are only staying somewhere for a few minutes for example, then make sure that is what you do. That way he will know what he has to cope with and it may feel more manageable for him.
He's clearly had some big challenges in his short life so boosting his self-esteem and helping him feel that the world is a safer, more predictable place could be just what he needs.