I wouldn't say you were unreasonable, OP; just extremely tactless. It's easy to handle something like that if you do so in a more controlled, less accusatory manner. Never make someone feel defensive if you're trying to express something that will make them feel guilt. I'd have told him I didn't mean to be rude, but I really didn't feel comfortable about him being that close to my food. Offer it to him; if he's eaten, let him know he can have it to eat later, as you leave to buy yourself a new lunch.
I know that's easier said than done when your visceral reaction is to retch, especially if someone has angered you. But if you become indignant, no matter how righteously, the other person will feel defensive and treat you like an adversary. That's not helpful for furthering the working relationship or creating mutual understanding; much less changing someone's behaviour, or making you feel better.