Еще любопытный момент:
То место где наши алгоритмы расходятся у тебя отрабатывает логически правильнее. Но мой вариант правильнее с точки зрения человека смотрящего в этот текст 
И да, твое решение красивее. В Lua таких абстракций нет.
Думаю что на Lua так же сделать можно, то есть ничего не мешает ту же std::multimap реализовать на lua. Это же не вшито в язык у плюсов, это ж просто либа. Лямбды в луа есть. Функции высшего порядка тоже.
Единственное но - в Lua нет строгой статической типизации, соответственно все опечатки, ошибки и так далее, будут валиться не во время компиляции, а во время исполнения. И чем слоев абстракций больше, чем абстракции сложнее, тем больнее получить такую ошибку во время исполнения программы а не компиляции.
PS. Кстати, мою программу можно легко ускорить в несколько раз - достаточно заменить multimap на какой-нибудь vector - дело в том, что multimap сортирует по ключам при каждой вставке, что не здорово. А вектора пар можно будет отсортировать один раз непосредственно перед выводом.