They both mean the same thing, which is (cooked) rice and/or meal. Since rice is an essential part of Japanese cuisine, the two meanings very much overlap. As you said, ご〜 go- is an honorific prefix, which makes ご飯 gohan the politer alternative used in more polite speech.
Both mean "lunch" (lit. "midday meal/rice"), but their usage differs based on politeness:
昼飯を食ってくる hirumeshi o kuttekuru - "I'll go grab a bite" (colloquial)
昼ご飯を食べてきます hirugohan o tabetekimasu - "I will go out for lunch" (polite)
(translations roughly equated to English usage)
Note that both 飯 and 食 are the same, yet the pronunciations differ widely for different politeness levels. Most words that can be formed with meshi can also be expressed using gohan.
Sometimes as part of compound words the politeness plays less of a role though and it's just the origin of the word that decides the reading:
焼き飯 yakimeshi - fried rice, Japanese word
炒飯 or チャーハン chāhan - fried rice, Chinese word