I have a few thoughts.
First of all, most people I know who have/had social issues have at some point said that they wished someone had addressed it with them earlier, usually in the form of explaining and enforcing boundaries. It's not kind to let someone continue in harmful habits that are only going to get more deeply ingrained and harder to shake as they age. Think to yourself - will it be OK for this kid to behave this way when he's 16? When he's 23? When he's 40? Is it OK for him to act this way in school, at University, when he has a job someday? Well, then when is he supposed to learn appropriate behavior? The things he learns now about how to interact will continue with him, and it's best if he learns good habits as early as possible. When you say to Clingy Kid, "Actually, it's not very polite to invite yourself to someone else's event," and then in turn take your son and his friends aside and say, "It's not nice to talk about something someone's not invited to in front of them, because it lets them know you've left them out" you're giving both groups information they can take with them to other interactions.
What I'm saying is, clearly communicating and enforcing boundaries and social grace is good for your son and it's good for Clingy Kid. It's also good for Kid Who Acts Out For Understandable Reasons (in fact, having predictable, consistent rules for behavior can be a particularly refreshing change for someone with a chaotic home life). The key to the kindness is in how you lay a boundary, not whether you have one or not. You should be direct and clear, but not harsh or vindictive. If you want to be extra kind, let them know what the appropriate thing to do instead is. So for Clingy Kid, it would be, "Please don't just invite yourself over for breakfast. Ask us the night before instead and we'll tell you if it's OK." Or in the case of a Thief Kid, "It's not OK for you to steal from us. If you need money, please ask for it." Giving them a predictable alternative (like a consistent "dinner: two nights a week only" rule) softens the blow and helps everyone feel a little more in control.
Second, my siblings and I were generally pretty socially capable growing up, with lots of large groups of friends - and we were also raised to value inclusivity. Because of this, we tended to attract kids who were clingy or more difficult to be friends with; the kind of person you occasionally need a break from. Growing up, I was always grateful when my parents were willing to be the bad guys for me - for example, before a party, they'd ask us how many kids we wanted to invite. If I said, say, "12," they would say, "OK, you're allowed to invite only12 people to this party, and no more." That way I had an excuse if someone who wasn't invited found out about the party. They were also available for "escape call" situations - if someone was at our house and I was tired of playing with them, I could take my father aside (privately) and explain that I'd rather stop playing. My father would then wait for me to go back out to play, then come outside and declare that it was time for me to do my homework and so all the other kids had to go home.
To go along with this, however, I was brought up to neverdiscuss an event with someone who wasn't invited to that event. If I took invitations to school to hand-deliver, for example, I was also given strict instructions to give those to my friends privately, because if I did it in front of other people I had to invite those other people.
As for the specific situation in the OP, where your son wants to limit the time he spends with his friend, what would you think of him just saying, "Actually, it's just going to be us today; can you come over on Saturday?" Maybe if he starts by proposing a different, predictable time each time rather than simply saying no, he can start transitioning into taking control of his social life and time a bit more.