I doubt "or later" would hold up in any court. You can't agree to a future contract that doesn't exist yet.
I would like it if you were right. Unfortunately, some people think differently. Some jurisdictions also don't treat a license as a contract. Many companies use clauses that allow them to change their terms and conditions only by announcing it before, some even at any time. A recent court case in Germany has rendered this practise invalid at least for bank contracts, probably more. But companies except banks continue to use those clauses as if nothing had happened.
Now if a developer has published a program under "GNU GPL v2 or later" and then forgot about it, then the GPL v4 appears and then a user installs the program while already knowing the GPL v4, things can again be different. That user might want to publish a changed version under GPL v4.
But if the new GPL version has a tighter requirement, it will not restrict use of the current version of the program, because it can still be used under GPL version 3.
Yes, but then the whole idea of applying to future versions of the program is lost: GPL v3 says that later GPL versions may not impose additional obligations on the author. People often switch the meanings of permission and obligation depending on whether they like open source or not. Some people see the requirement to publish source code not as a permission but as an obligation. And in fact, it is an obligation for the author and a permission for the user (who may also be an author, though). You could write a GPL v4 that removes the need to publish source code for a case that is artificially constructed to appear like a problem that needs to be solved to fulfil GNU GPL v3 Nr. 14 sentence 2, then take a program under "GNU GPL v3 or later" and publish your changed version of it under "GPL v4" without publishing the source code. GPL v2 does not even have the obligation restriction for new GPL versions.
In general the GPLv3 is a better choice than GPLv2 because it's more compatible with other licenses and [...]
"GPL v2 or v3 but not later" would be even more compatible than "GPL v3". For ZK, compatibility with GPL v2 also matters more than with an Apache license.
I think that if anything was strictly GPL v2 we would have a problem
but combining "GPL v2 or later" with "GPL v3 or later" is fine
Yes, of course. And most ZK code is under "GNU GPL v2 or later". But as I said
ZK has some widgets under "GNU GPL v2" (only) and some under "GNU GPL v3" (only).