Switching licenses on a FOSS project without copyright assignment is almost impossible, unless the license already allows for it. See Linux kernel GPLv3 relicensing discussions of the latter aughts.
All software distributed under permissive licenses can be sublicensed under GPLv3 overnight. And all future contributions can only be accepted under GPLv3. Software licensed as exactly GPLv2 (rather than GPLv2 or later) is harder to do this upgrade for because of the reasons you mention, but lots of software can have their license fixed.
All software distributed under permissive licenses can be sublicensed under GPLv3 overnight. And all future contributions can only be accepted under GPLv3. Software licensed as exactly GPLv2 (rather than GPLv2 or later) is harder to do this upgrade for because of the reasons you mention, but lots of software can have their license fixed.