Barring, раньше ничего не мешало писать в разные файлы и подключать их все в html.
Но это быстро поменялось на то чтобы писать в разные файлы и склеивать их в один, затем его подключать.
ну и дальше понеслось. Пока не было стандарта - все изобретали что могли - вариантов много. потом добавили модули в спеку и сейчас все понемногу приходит в норму и единообразие
Пока что мэйнстрим это писать es6 модули но собирать разными вабпаками и прочим - как именно они реализуют эти модули на js - можно открыть билд и посмотреть, там все видно. В целом те же (function () {})() c некоторой обвязкой.
Все идет к тому чтобы модули были везде нативные, а уж как их там в браузерах-движках реализуют - отдельная история