Ну так-то оно проходит по элементам package.path/cpath + LUA_PATH/CPATH из окружения, заменяет ? в строчках на имя модуля, заменяет . на разделитель текущей системы и так далее, и для каждой строчки вызывает функцию в package.loaders. Первое что вернёт первая же функция есть загруженный модуль.
Ищет до тех пор пока не найдёт
А если скрипт загружен в памяти, а не из файла?
А, ну предварительно смотрит в package.preload и package.loaded на предмет вызываемого скрипта. Если оно есть там — загружает вне очереди, и то что подгружено loaders'ами отправляет в loaded как кеш.
Обсуждают сегодня