I think the fact he knows a lot of words and can mimic hugging/saying sorry/kindness is misleading you into believing he understands more than he does.
He is too young to understand all the whys and wherefores, he is NOT actually capable of being empathetic yet either, the hugging and saying sorry when told to is just a trick he has learned like a dog learns sit.. it doesn't mean much.
So your solution has to be the same response, EVERY time and it has to be swift - within a few seconds, and consistent.
No! Remove from whoever he was hitting/disrupting - if it's at home or nursery then it's going to be for a set time, if its you taking him out then it's out and home straight away.
This isn't at this point punishment as in ' he understands his behaviour meant he lost a priviledge or treat..' it's ending the behaviour so he CANNOT be reinforced by continuing to practice it.
Right now... he hits someone or knocks their food from their hand or pushes them... he gets attention in the form of other kid reacting, an adult talking to him... thats reinforcing the behaviour.
Hes then told to say sorry, and hug - he does, thats also reinforcing as he gets interaction and attention.
Then he can do it again - thats enjoyable.. and then the cycle repeats!
From my POV as a dog trainer/behaviourist I'd also be looking at whether there is an alternative outlet for some of his behaviour.
Obviously theres no appropriate way to go around slapping people, but there are appropriate outlets for lots of behaviours that may fit the bill - bouncing, kicking balls, throwing balls or beanbags etc.
IF you can find something that fulfills a need he has... then the chances of reducing the unwanted behaviour are far higher.