There is also an aesthetic reason I’m generally against the hyphens: If you have to use extern "..." as "...", it mixes hyphen-fixes with actual renames. Though it’s not a big one, it just bugs me a bit.
That being said, has it been proposed to just give extern crate an identifier and a quoted string form, with the latter having a simplifier? Examples:
// loads foo_bar as foo_bar
extern crate foo_bar;
// loads foo-bar as foo_bar
extern crate "foo-bar"
// loads foo_bar-sys as foo_bar_sys
extern crate "foo_bar-sys";
This could probably be extended to other characters, like the above mentioned dot:
// loads windows.data.pdf.lib as windows_data_pdf_lib
extern crate "windows.data.pdf.lib";
Though at that point, I’d expect the deciding factor will be what cargo can support for crate identifiers. At least the dot seems semantically important there.