That's interesting. But if you say
use Module1 3.0; (notice that the version number is not in quotes), then you get
Loading Module1...
Module1 version 3 required--this is only version 2.0 at version.pl line 4.
BEGIN failed--compilation aborted at version.pl line 4.
It seems that if you give a number, the version check is done by use, but if you give a string it is treated as the first argument to pass to import, in which case you do need exporter to handle it.
I hadn't noticed because I always call use by giving the version numbers as numbers, not as strings.