How Bpy.ops.mesh differs from bmesh ops
Operators are for users, BMesh is for scripts
Pretty much all Blender's functions that you use in the UI must have their operators. This is just how Blender works. The UI is defined with Python and there must be a way to edit meshes from the UI so bpy operators exist. Mesh operators are better designed to be used by a human user. For example, they often require interactive user input. They are not designed with usage from scripts as the main goal.
BMesh is a tool for programmatically accessing Blender's internal modelling functionality. It is created for coding, flexibility, efficiency and speed of scripts manipulating meshes. When scripting and programing you usually want to do more with geometry than it would make sense for a UI user. BMesh is supposed to be for that. It is designed to access Blender's modelling functionality programmatically from a script as opposed to by a user.