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