ReferenceError: BMesh data of type BMesh has been removed cause and fix
Assigning class properties

The error you were seeing was in the way you were setting the bmesh in your Create class. The property bm will be the bmesh for the context edit mesh when the sctipt was run, rather than, what you want,  when the operator is invoked. 

Suggest rather than instancing the class in modal loop, make one instance in invoke and use that.  Add a constructor to your Create class with an argument context to ensure it is for the context mesh.

Example where the bm is set as a class property of the operator.

import bpy
import bmesh

bmeshes = {}

class Modal(bpy.types.Operator):
    bl_idname = "object.modal"
    bl_label = "Modal Op"
    bl_description = "Other thingy"
    bl_options = {"REGISTER"}

    bm = None

    @classmethod
    def poll(cls, context):
        return True

    @classmethod
    def bmesh(cls, context):
        me = context.edit_object.data
        cls.bm = bmesh.from_edit_mesh(me)

    def invoke(self, context, event):
        bpy.ops.object.mode_set(mode='EDIT')
        self.bmesh(context)
        context.window_manager.modal_handler_add(self)
        return {"RUNNING_MODAL"}

    def add_vert(self, loc):
         return self.bm.verts.new(loc)

    def modal(self, context, event):
        # no longer in edit mode
        if context.mode != 'EDIT_MESH':
            self.bm.free()
            self.bm = None
            return {'CANCELLED'}

        me = context.edit_object.data
        if self.bm is None or not self.bm.is_valid:
            # in edit mode so try make a new bmesh
            self.bmesh(context)            
        if event.type == "LEFTMOUSE" and event.value == "PRESS":
            v = self.add_vert((0, 0, 1))
            # update after all operations
            self.bm.verts.index_update()
            bmesh.update_edit_mesh(me)
            print("added", v)

        if event.type in {"RIGHTMOUSE", "ESC"}:
            return {"CANCELLED"}

        if event.type in ["WHEELUPMOUSE","WHEELDOWNMOUSE","MIDDLEMOUSE","LEFTMOUSE"]:
            return{"PASS_THROUGH"}

        return {"RUNNING_MODAL"}

def register():
    bpy.utils.register_class(Modal)

def unregister():
    bpy.utils.unregister_class(Modal)

if __name__ == "__main__":
    register()


For panel code to have an edit mode bmesh I often use a global dictionary

bm = bmeshes.setdefault(me.name, bmesh.from_edit_mesh(me))


which can be set / cleared using the panels' poll method.