Blender Add-on Dev: Unregister is never called on Blender Exit?
The unregister() function is only called when you deactivate the add-on in your preferences, while register() is always called when Blender starts in case the add-on is activated in the preferences. You can test this with the following simple add-on that writes into a text file whenever one of the functions is executed. The example also includes how to add a handler that is triggered when Blender is exiting.

This add-on tries to write the test file into Blender's install directory. If that directory requires special permissions, then you should adjust the path to somewhere it can write the file to.

bl_info = {
    "name": "Register and unregister test",
    "author": "Robert Guetzkow",
    "version": (1, 0),
    "blender": (2, 80, 0),
    "location": "Dummy panel in View3D",
    "description": "Check when register and unregister are called",
    "warning": "",
    "wiki_url": "",
    "category": "3D View"}

import bpy
import atexit


class EXAMPLE_PT_panel(bpy.types.Panel):
    bl_label = "My own addon"
    bl_category = "Name of your tab"
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI"

    def draw(self, context):
        layout = self.layout
        layout.label(text="This is a label")


classes = (EXAMPLE_PT_panel,)


def exit_handler():
    with open("test.txt", "a") as myfile:
        myfile.write("exiting\n")

def register():
    for cls in classes:
        bpy.utils.register_class(cls)
    with open("test.txt", "a") as myfile:
        myfile.write("register\n")
    atexit.register(exit_handler)


def unregister():
    for cls in classes:
        bpy.utils.unregister_class(cls)
    with open("test.txt", "a") as myfile:
        myfile.write("unregister\n")


if __name__ == "__main__":
    register()