В русском языке древнейшей эпохи фонема <о> не выступала после мягких согласных. Иными словами, наши предки когда-то произносили, например, слово пёс не так, как мы говорим сейчас, – [п’ос], а [п’эс], слово мёд не [м’од], а [м’эд]. Буква ё поэтому была им просто не нужна.
А потом в фонетике древнерусского языка произошло очень важное изменение, которое лингвисты называют «переход е в о» (точнее, переход звука [э] в звук [о]). Так и возникло современное произношение [м’од] (мёд), [п’ос] (пёс), [вс’о] (всё). А вот перед мягкими согласными звук [э] не переходил в [о], а оставался без изменений, этим и объясняется соотношение, например, [с’ол]а – [с’эл’]ский (сёла – сельский): перед твердым [л] звук [э] перешел в [о], а перед мягким [л’] – не перешел.
Однако никаких специальных букв для обозначения появившихся в результате этого изменения сочетания <jo> и <о> после мягких согласных, имеющих твердые пары, не было. Наши предки на протяжении нескольких столетий обходились буквами о и е (писали, например, пчолы и мед, хотя в обоих словах произносили [о]). Только в XVIII веке в практику вошло буквенное сочетание iо: мioд, ioж, всio, реже использовалось сочетание ьо. Однако они не прижились.
И в конце XVIII века в качестве такого знака Н. М. Карамзиным была предложена буква ё.
Источник:
https://gramota.ru/biblioteka/spravochniki/azbuchnye-istiny/istiny-7-jo