Is there any etymological reason for this? Normally, an o in a stressed syllable followed by /n/ and a vowel would be pronounced /oʊ/. And phoneme is pronounced /ˈfoʊnim/. Why does the pronunciation of phonics change? Are there any other words in which this happens systematically?
It's not related to etymology: the short vowel is because of the presence of the suffix -ic, as you say in the comments.
Even when O is in a stressed syllable and followed by a single consonant letter and a vowel letter, it isn't certain that it will be pronounced as /oʊ/ instead of as /ɑ/. Various words have a "short vowel" even when only a single consonant letter follows: e.g. astonish, solid, deposit, and many words where there is more than one syllable after the stressed syllable: economy, monument, solitary, operate, etc.
There are a number of other -ic words that show a short vowel: microscopic, hydrophilic, osmotic, static, monotonic, isotopic. But unfortunately, this pattern is not consistent, so you can't be certain that an unfamiliar -ic word will be pronounced with a short vowel. I asked a question a while back about -ic words with a long vowel (like basic and psychic) and there seem to be at least a hundred of them. A number of -ic words have multiple pronunciations, one with a short vowel and one with a long vowel, as indicated in the Collins American English entry for phonics that GEDgar found.
There are similar patterns associated with other suffixes. For example, verbs ending in -ish and adjectives ending in -id tend to have short vowels in their stressed syllables (it is sometimes noted that -ic, -ish and -id all are spelled with the letter I). In contrast, adjectives ending in -al tend to have long vowels when the second-to-last syllable is stressed (e.g. final, nasal, oval).