mod and extern crate are similar, in that they add new ‘items’ into scope and give the current crate access to things that it didn’t have access to before. use is purely about name resolution. For that reason, I think the confusion between mod, extern crate and use is purely one of education rather than language design. Rust is always going to have crates, modules and a way to create short bindings to access ‘distant’ names. This is why I don’t think that a simplification is possible and we should focus on education rather than some language fix that just hides things.
Removing extern crate would be unfortunate, since I like the redundancy of having a source code reference to external dependencies rather than only a reference in the build system. For people who want to ignore dependencies, I’d be fine with cargo new adding a directive to Cargo.toml which would pass command line options to rustc which cause dependencies in Cargo.toml to not require extern crate. That means that people using rustc independently get to pick which they want, both being explicit to them. And cargo users can remove the directive from their Cargo.toml trivially and new users get a new default behavior that let’s them ignore dependency complications for a little longer.
I think combining the use syntax with semantics that don’t simply rename items that are already accessible via a different name would make things more complex and harder to teach.
And as somewhat of an aside: I think someone mentioned that foo/mod.rs is confusing as a beginner. I suppose that makes sense but why would a beginner be writing code which benefits from having items that are basically crate_name::mod1::mod2::item. If you’re writing code that benefits from that, it seems to be at least intermediate level, if not advanced.