Я тоже пробовал создать виджет, подключаемый одной строчкой, ломал голову и подсматривал решения других сервисов. Вот, что было бы хорошим, по моему мнению, вариантом:
1) Строка кода на сайте с ID виджета подключает к странице скрипт, который...
2) Создаёт iframe, внутри которого будет рендериться сам виджет, также внутри iframe подключается скрипт, который рендерит виджет согласно конфигу и CSS для элементов, которые будут одинаковыми у всех клиентов.
3) Этот скрипт внутри iframe подтягивает ID виджета либо как глобальную переменную, которую объявил скрипт из пункта 1, либо другим способом и запрашивает у сервера полный конфиг виджета в виде JSON и далее создаёт внутренние элементы виджета внутри iframe. Чтобы каждый раз не тягать конфиг, но и не иметь проблем с кэшированием, можно сохранять в LocalStorage весь объект с конфигом и c версией конфига в виде числа, генерирующегося при записи конфига и при очередной загрузке страницы просто запрашивать у сервера конфиг с параметром, содержащим версию того конфига, что в ls и если сервер ответит, что он не изменился, брать из ls. Если изменился - он отправит новый конфиг, который будет записан вместо старого