Well, I think there is an explanation, but I'm not sure it's very helpful for a young child. I'm pretty sure it's because the words have different origins - demon from Latin 'daemon'/Greek 'daimon', and lemon from Latin 'lemon'. So that has probably affected how they've been pronounced, even when the spelling has changed.
A good rule for early readers is "If the short vowel doesn't work, try the long vowel". So 'demon' has the long 'ee' and 'lemon' has the 'e'. The letter 'e' often represents both these sounds ('these'/'rebel').
It is true that once children have a good phonic understanding, they can decode everything plausibly. This doesn't mean that it is always accurate, if the word is outside their comprehension eg DS2 read 'trough' as 'trow' recently, because he didn't know what a trough was.
It's the fault of English orthography.
Er.