Regarding your first question: This is just how things come along the natural way. When you think about your game, you will think about the player, enemies, scenes, rooms, weapons, objectives etc. pp. - all those things are naturally modeled as objects in the sense that they group properties (i.e. member variables) and behavior (i.e. methods). So that is just the way it usually is, and if the language that you choose to implement that stuff provides a way to express this, why would you not use it?
Regarding your second question: if the language of your choice does not allow a close to natural implementation, you will want to try to model it as closely as possible to that. To pick up your example: you would model your objects with structs (properties) and implement behavior accordingly - either with functions operating on those structs (e.g. enemy_hit(player)) or with function pointers contained in the structs (i.e. player->hit(player,...)).