Just one aspect from practical experience to add to the discussion: One of my key issues with presets is portability: I replicate my Cantabile racks and songs between three machines (studio, live, backup) via Dropbox; a mechanism that allows me to keep presets/vst configurations within song/rack files makes my life immensely easier.
A lot of synths have moved to their own preset management systems, using preset files folders somewhere in the local file system (Documents, AppData, ProgramData), which makes synchronizing presets between my systems a pain.
One specific pain point is Korg M1 - it switches out the complete preset bank it exposes whenever you use a preset from a different “card”, but of course Cantabile doesn’t know that. So using the internal preset model is only usable in a very constrained way (stay within one “user” bank, copy everything there, don’t use performance mode…).
These days, I mostly use “Entire bank” state behavior for those complicated synths and a number of other plugins. As long as I don’t get switch time issues, this works nicely - with the exception of some plugins, e.g. Fabfilter Q 2 that creates clicks when loading states, even when nothing changes.
For plugins with full bank issues, or for instruments where I need smooth transitions, I mostly get by with state behavior of the relevant parameters as “light presets”.
Since I hide all this mess within racks anyhow, things look pretty nice at song level - but of course having this behavior pre-coded in plugin preset variants would be very helpful and clean up the inside of my racks!