Yeah I'm finding it hard to imagine how a lot of people script entire games in lua or any non-object oriented script. Lua has "OOP" but it's very strange and a bit too much effort to maintain if you're trying to control objects held in C++.
I'm trying a wierd little experiment that I hope works out well. It works off the principle that a "game" can be basicly described as a series of interactions between various objects. Actors are assigned their own "behavior scripts" that are kept in lua. If you work with shaders a lot, it is actually a very similar concept... just with AI and actions instead of graphics.
There's also "interaction scripts" which are the same thing, but take 2 actors types as parameters and there you can define how those 2 types of actors deal with eachother. During the game update, it goes something like:
for every object x
for every object y
Of course there is other code to keep scripts from repeating twice, stop unrelated actors from calling interactions, methods for instant indexing (for speed purposes).
And of course, lua is fast, but only as fast as scripting languages go. I also set up a system where I can create a carbon copy of every script written in lua and put it in C++. To switch out the scripts, all I have to do is specify that the object will be running a script in CPP instead of in lua. It's about a 20 second process all in all.
I'm still anxious to see how all this works in the end.