I can describe what you need but I can't do it myself (ask someone from the command block subsection, maybe they can).
Have a tracker for each type of food eaten, whenever that type inceases and the player's hunger bar is above 18, add its food value to a counter. If the player's hunger drops below 18, decrease the counter value by the appropriate amount and give the player Saturation. That way you can eat over your maximum hunger, although it's somewhat clunky since you need to wait until exactly one point of hunger is missing. That's what I could come up with quickly anyways, maybe someone has a better idea than this.