Currently, both of the problems can be solved in one kludge: release a big upgrade as a new app. For example, I bought the app Things when it was at version 2. I liked it so much that when Things 3 came out as a separate app, I bought it too. And if I really loved the UI of Things 2 and hated the new UI in Things 3, I wouldn't have to do anything. I could keep auto-upgrade on, and never have to worry about my Things 2 app being upgraded to something I don't like.
(Source: We won an Apple Design Award for our app Streaks last year.)
I'd love to be able to undo app updates.
Or if you have a jailbroken phone there are methods that lets you simply pick the version to download/downgrade/upgrade to within App Store.
You certainly can do this, unless I misunderstand your point. Automatic Downloads are an option in iOS. You can turn them off if you don't wish an app to automatically update every time a new release comes out.
I'm currently on a version of Snapchat that does not recognize when I use iOS 11's screen recording feature, so I can record anyone's snaps and they don't get a notification. But I have to have automatic updates off, and be very, very careful when updating (when I tap "more" to read about other app updates, I accidentally tap like .5cm lower I can upgrade Snapchat), and hope none of my friends ever "helpfully" tap the "Update All" button on my phone. It would be so much nicer to just lock the version somewhere.
Surely this won't be difficult, for an app that does class timetabling for students. A fresh batch every year.
How is this any different? Even if there was a mechanism for paid upgrades (there is through IAP), you still can't depend on people paying for it.