Don't forget that all these have different ways not only for creating Windows etc., but also more intricate things -- handling callbacks, messages etc.
It is possible to implement a "use AnyDBM;", but only because the interfaces are all very similar. It would be too complex to "use AnyGUI;". And not worth it. The better approach is IMHO to use wxWindows, as mentioned above. Yes, you're forcing the user to install wxPerl (or yourself to distribute it), but at least it will run on different platforms natively.