How to reset add-on preferences?
You can create an Operator and make it part of the Preferences layout for your custom add-on:

class MyAddonPreferences(bpy.types.AddonPreferences):

    bl_idname = __name__

    display_flag: bpy.props.BoolProperty(
            name="Display Flag",
            default = True)

    def draw(self, context):
          ...
          layout.row().operator("my_addon.reset_preferences")


Best practice is using property_unset(property):

class MYADDON_OT_resetPreferences(bpy.types.Operator):
    """ Reset Add-on Preferences """
    bl_idname = "my_addon.reset_preferences"
    bl_label = "Reset Properties and Settings"
    bl_options = {"INTERNAL"}

    def execute(self, context):
        prefs = context.preferences.addons[__name__].preferences
        prefs.property_unset("display_flag")
        ...
        return {'FINISHED'}




In order to reset the properties of a certain add-on it's basically the same, you just need to find a way getting the name of each property. 

Example on how to reset the settings of Loop Tools by reading its annotations using the Console:

&gt;&gt;&gt; prefs = C.preferences.addons['mesh_looptools'].preferences
&gt;&gt;&gt; props = prefs.__annotations__.keys()
&gt;&gt;&gt; for p in props:
...     prefs.property_unset(p)