There's a lot to like about Lua, especially when you compare its speed to that of reference Python or Ruby, but the weak typing makes me reluctant to try it for a larger project. I almost wish there was a TypeScript for Lua.
Technically, Lua is a strongly typed dynamic language: it's just that most things happen to be of a single "supertype" (the table).
If you need a more rigorous approach, Lua's integration with C is good enough that you can write the architectural bits in C/C++ and just use Lua for the long tail of behaviors, or go one bit better and use a language like Terra [1] that provides a C-like static language inline with your Lua code.