Как писали выше, да, можно и айфрэйм, но у него есть недостаток. Он может неработать не на всех клиентах.
На счет скрипта, я считаю это самый оптимальный вариант, хоть и сложнее.
Мы однажды реализовывали виджет, только немного другой. Опишу как это делали мы.
Пользователь должен был разместить некий div куда должен был подгружаться наш виджет. И подключал один файл js, который за все отвечал. То есть он добавлял свои стили, проверял на странице jquery и если нету, то подключал,
Так же он подключал я.карты.
В тот div, который разместили изначально постепенно наполнялся нужным нам видом.
И В общей картине генерировался целый виджет.
Так же предусмотрели вирсионность виджета, что бы у пользователей, которые уже поставили виджет ничего не снеслось после обновления кода.
Да, достаточно не легко, но сделали и работает.