Welcome to the forum.
Please edit your post to add CODE tags to your code - this makes it easier to read and also formats it correctly - select the code and click the hash # icon. Thank you.

I'm not a VBA expert, but I wonder whether you might be able to do what you want by putting the header in another Listbox, which is positioned above the main one. You could then allow deletion of rows from the main listbox, but lock the header listbox. For the columns to be the same width, after autosizing the columns in the main one, I think it must be possible somehow to format the column widths in the header listbox to be the same width as the ones in the main listbox.
Having seen quite a bit of code over the years, I think something like this must be possible - but there's no way I could write it for you, sorry!