First point can be accomplished without creating objects. To stay with you example:
local speed = 5 local angle = 90 obj.x, obj.y = point.vecAdd(obj.x, obj.y, point.vecScale(point.angle2vec(angle), speed))
This peace of code achieves the same result without creating tables, assigning metatables and removing them at the end.
I used the function names from my library, so don’t get confused by them.
You can even localize this functions if you use them often. Which is not possible with a OOP approach.
I not questioning that your code is working, it’s just that I think a math library should be as fast as possible, as it is used frequently in game logic. And as function calls, creating tables and indexing tables are all quite slow actions (one slower as the other), they should be cut to a minimum.