Со стороны жс есть твой контекст выполнения и все. Ни файлов, ни либ. Каждое объявление <script> единожды выполняет код, который в нем указан (по ссылке или напрямую). Собственно, в случае кэша, браузер хранит уже распарсенный жсный код во внутреннем представлении, который при виде уже знакомого объявления просто запускает в контексте страницы. Т.е. делает eval по сути. Либа может быть и не в виде неймспейса, это может быть просто функция, набор функций и прочее. Опять таки, неймспейс - просто объект, который по сути хранилище пар ключ-значение.
Каждый отрендеренный объект на экране будет в DOM дереве, чтобы js имел доступ к нему. Это касается и body, и head и прочего.
Как именно происходит рендер - отдельный вопрос.
P.S. Я рассказал упрощенно и для самого популярного - Chrome/Chromium и основанным на них. Как там у сафари или лисе я подробно так и не изучал, но похоже.
P.P.S. Если хочется подробнее - лучше погуглить статьи, они есть. Тема слишком обширная, чтобы в чатике подряд все нюансы описывать. Там на книгу наберется легко.