My two pennies:
Objects are worthless in isolation, while it is good to avoid spurious uplinks to containing data structures, an entity (creature, npc, etc...) is almost just a lump of data unless it interacts with the map, items, other creatures, whatever.
Don't be afraid to put uplinks to containing objects. If your items need to know what race of creature is wielding them, there are many fancy design ways to figure it out, but if(_holder->race == RACE_ELF) is probably the easiest and least error prone.
I have entities with move as a member function, and it basically delegates to the map to do the physical moving, but then the entity can override the virtual move function to do something before or after the move, while if you have a monolithic move function for the map, handling pre-post ops on a type by type basis gets nuts.
BTW, C and Lua is a great combo. My engine is C++ and Lua, and I'm thrilled about it.
PS> There is no 'right' way, only wrong ways, and tradeoffs.