Then why is there even a destination= in upgradeStep if it's not honored?
(Let me motivate the use case: management wanted a bunch of new features in the next release. Then they decided to cut back. I thought just reducing the <version> would do it, but was surprised all my upgrade steps got run anyway. For now I've commented them out.)
Destination serves as starting point for upgrades in future versions of addon. When you run an upgrade step, your destination will be the current version of the profile in GenericSetup. In your example, the profile version after execution will be 3. In a future version of the addon it would have something like: