não acho que seja um erro de interpreador, mas, um comportamento bem conhecido.
a linguagem lua é escrita em C e com isso vem seu comportamento em muitas coisas, nessa situação apontada, faz o uso do toupper().
a tabela "ASCII"* vai de 0 a 127 e a maioria dessas funções de manipulação de string tem essa "previsão".
já a tabela "ISO-LATIN1"** vai de 0 a 255 essa contém acentuação.
alternativas:
1- fazer uma tabela para mapear a acentuação
2- adotar UTF-8
3- usar
os.setlocale() pode ajudas, mas, nunca usei
--- lua-5.1.5 lstrlib.c
static int str_upper (lua_State *L) {
size_t l;
size_t i;
luaL_Buffer b;
const char *s = luaL_checklstring(L, 1, &l);
luaL_buffinit(L, &b);
for (i=0; i<l; i++)
luaL_addchar(&b, toupper(uchar(s[i])));
luaL_pushresult(&b);
return 1;
}