I have a subjection that you may want to consider, you have chosen to use callbacks function in the C style because you needed to allow multiple callbacks to be allow and C++ make this difficult, so I thought you make want to use the method on the link bellow that I was discussing with some guys of about passing C++ methods pointer. I realized that it may be a bit risky but so is passing C callbacks with the advantage that now I don't have to create a function that some how has access to a instance of a class. I think this would make LUA easier to use.
http://stackoverflow.com/questions/20359668/is-it-safe-to-calling-a-member-function-not-defined-on-the-base-class-from-of-a