My stupid use case:
I had to create a temporary column so I could flip the contents between two columns (one being the default one, which I wanted switch it's purpose with another) since it's not possible (I believe) to set which column is the "default" one (you can only reorder it/rename it).
Now I have this stupid hidden "tmp" column that aggravates my OCD.
More reasonable use case:
Teams are trying out a couple development methodologies or the dev methodology of the team changes over time because evolution. They might go from one setup with X columns to one that has X-Y columns. Hiding is only a partial solution as some teams use the hidden columns actively (ie: an "archived" column for tasks done in the previous sprint, moved from the "done" column) and having multiple hidden columns where some of them are in use and others aren't is confusing/dirty/ugly.