Swift has support for "autolinking", automatically matching a dylib up with an imported module, but it doesn't do that for libraries you build by default. It'll do it for frameworks (which have a known directory layout), or if you use the -module-link-name <foo> option when you build the library.
Thank you guys for your help. I resolved this, turns out -l is indeed the solution.
What I didn't know was that it's not this: swiftc VogelScript.swift -I . -L . -l VogelModule
But this: swiftc VogelScript.swift -I . -L . -lVogelModule
So, -l doesn't accept spaces, unlike lots of other options. I'm unaware of the reasons why, but that's how it works.