Вот поэтому и не работает, каждая строчка в терминале исполняется как отдельный кусок кода, если ты создашь локальную переменную то к моменту начала ввода второй строки локальная переменная перестанет существовать.
Грубо говоря, каждая строчка в repl'е (если она закончена, т.е. в глобал скоупе) оборачивается во что-то такое: xpcall(function() loadstring(line)() end, function(msg) print(debug.traceback(1)) end)
Локальный скоуп у неё соответственно свой собственный. Да, луёвый repl не очень удобен.