When they are a bit older they can start understanding food groups, so now mine are at an age where if they don't like the cooked vegetable, for example, they might ask for one we keep raw in the fridge, and we are usually OK with that unless we are just too tired to get up!
Just brainstorming - what about arranging the food visually on the table in groups, then he can see "one from this group, one from that..." before he gets more of the same?
Also, sorry to be graphic, but how is his pooping? My kids have some very visceral memories of "bad poops", and so around age 3 I could tell them, "if you eat nothign but bread and cheese you will get owie poops," or "if you eat nothign but raisins you will get runny poops", and they are more willing to cooperate, or at least they understand that I am insisting because I am trying to help.