Убери setFillColor, сделай отдельной строчкой. Получается ты присваиваешь переменной boostButton не объект-кнопку, а результат выполнения функции setFillColor, который nil, о чём тебе ошибка и говорит.
Посмотрите в первую очередь Corona и Defold, у них разные подходы, но оба довольно просты в освоении и использовании.
Параллельно можно изучать С++ и там уже смотреть что для вас удобнее.
Просто держите Lua переменную со значением таблицы (объекта) в каком-то пространстве, чтобы сборщик мусора её не удалял. Ещё есть функция lua_ref(), которая может добавить любое Lua значение во внутренний реестр.
Пример показывает, что несмотря на то, что массивы в Lua начинаются с нуля, использовать нулевой индекс всё же можно.
Table в Lua это составной тип, у него внутри есть по сути две части: одна массив с числовыми индексами от 1, другая - словарь/хешмап со всем остальным.