The problem is that if you don't DLLEXPORT the variables, what you're getting is the locally defined versions in the module when you USE it. Importing variables and routines from a module in a DLL doesn't work well, partly because there's no good mechanism to say "don't look at the local definition of this routine/variable/etc., import it instead" This is something we need to work on.
What you could do, I think, is define a different module that has module-level variables and INTERFACE blocks, with appropriate ALIAS and DLLIMPORT attributes. I haven't tried this to see how it would work. We may need to invent some new syntax for this.