Какие существуют способы создания инструмента для форматирования текста (на подобии текстовых редакторов)?
Смотри сюда, сырцы у них открытые.
https://github.com/codex-team/editor.js
Это js. 

Contenteditable может вообще не использоваться, так как поведение от браузера к браузеру отличается. Изначально это кажется прикольной идеей, но потом понимаешь, что технология нулевая. 

Gdoc, facebook и некоторые другие ребята делают вообще полностью свое решение. Трекают нажатия клавиш, рисуют кастомный курсор, записывают контент в виде неких блоков, которым можно задать свойства или подменить на валидный html. 

Тема достаточно сложная. Наверное, во фронтенде это в принципе одна из самых замороченных штук.