в редакторах существуют переключатели с визуального на html-вариант отображения.
html-вариант — это обычная textarea, поэтому и отображает теги.
визуальный вариант — это эмуляция textarea обычным блоком. Эмулируется двумя способами (вернее, я знаю только два способа, может ещё есть):
1. как описал devote — наложением.
2. javascript'ом перехвата нажатия клавиш и добавления результата в блок с соответственным форматированием.
сам делал в прошлом году по второму варианту.. громадный скрипт, большой геморрой и потраченные нервы, но вроде всё работало
минусы:
1. трудно сделать мигающий курсор, как в textarea
2. приходится дополнительно заморачиваться с отловом позиций (и тут contenteditable спасает)
плюсы: опыт