I think per-object mutexes won't provide very much useful critical region definition. For example, see the following code,
some_package.some_function(exp.prop, exp.prop2)
It involves accesses to three properties to two tables. How do you define the critical region? Do you lock and unlock each table before and after each access to a property? Do you lock both tables in the duration of the entire line? How do you achieve the latter without extend Lua syntax to expose explicitly PV?