С Lua не знаком, но описанная тобой ситуация - как я её понял - характерна, например, и для Ruby.
Он скриптовый язык и довольно медленный в исполнении..
Многие библиотеки либо дополняют существующие классы на том же Ruby, либо пишутся как dll на C++, что, конечно, ускоряет выполнение в разы, но противоречит самому стилю Ruby.
Я думаю, что это концептуальный вопрос и вариантов ответов будет как раз два - которые ты сам и озвучил. Каждый выбирает свой подход и оба, в принципе, правильные.
Вообще, общий принцип всегда таков - если ты пишешь код, который потом будет использоваться в нескольких программах - его нужно выносить в отдельную библиотеку, а не копировать из файла в файл. Детали реализации уже менее важны.