Как динамически создать всплывающее окно для элемента?
Конкретно для данного случая используйте Selection API. Можете получить Range, а от него getBoundingClientRect() и рассчитать позицию вашего попапа
Поисковые запросы для поиска примеров и готовых решений данной задачи: 

popover on selected text  
popover on selected text vanilla js
tooltip on text selection

Как это реализовать? Используйте Selection API, как вам и подсказали в соседнем ответе, далее нужно будет определить позицию выделенного текста. Далее создаем popover окно с нужным содержимым, устанавливаем абсолютное позиционирование, добавляем дополнительные стили, а ещё: устанавливаем в качестве параметров top и left, полученные позиции. Вот нашелся вариант: https://codepen.io/FezVrasta/pen/vWXQdq