Magento Event Observers: Singleton versus Model

There is only one usecase, where singleton for observers would make sense. Thats when you observe two events which depend on each other and you want to get something during the first one, but process it during the second event. You could also use registry here, but that would be something even more global, so singleton and a protected class variable is a good solution.

In reality this is nearly never happening, but magento 1 and 2 use by default shared=true

The probably reason why singleton is default in magento: micro-optimization! Someone thought it would save sooo much time to not need to create the objects again and again. May be true for some events which are called a few hundred times during a request, may be it is even reasonable to do it as default for the cases of bad usage of events.