I use a structure very similar to Justine for managing my external maven deps and agree that it works quite well. I can't quite tell from your question whether you're talking about doubling up on exports for external dependencies, or for internal dependencies from one package in your project to another. The reason that Bazel doesn't export internal dependencies automatically is an interesting subtlety in its design that is quite important for larger projects.
For Java, Bazel usually works best when each package has its own BUILD file and each BUILD file has one target (Pants calls this the
1:1:1 rule). This isn't strictly necessary though, and especially when porting over Maven repos it often makes sense to start by just defining BUILD files for top-level projects that glob everything underneath them recursively. This is bad for build performance though, since it means the entire project needs to be rebuilt whenever a small part of it changes. So let's assume you have a BUILD file for each package.
The question now is, supposing you have package A that depends on package B, and package B depends on a third-party library like guava, should package A be able to use guava also without having to explicitly say it depends on it? As far as the Java compiler is concerned this is fine, package B and guava must both be on the classpath during compilation, so there's no reason that A can't refer to guava. But Bazel will give you an error if you try unless you also list guava as a dependency of A (or if B exports guava). Why? It's to make B easier to maintain. Suppose B was refactored such that it didn't need to depend on guava any more, so the author tried to remove B's dependency on guava. Now A and a lot of other packages will break! A lot of people who depended on B might have been relying on it for the guava dependency without even realizing it, and now whoever's working on B would have to either find every package depending on B that needed guava and add it manually, or keep guava in B's dependencies (slowing down builds for everyone who depended on B but not on guava). Bazel actually used to work this way and it was pretty painful in a large company like Google. So this is why it makes you list your exports explicitly - exports are effectively part of your targets API and you can't change them without breaking people, whereas deps can be added and removed freely without causing problems for other people. In practice, it's pretty rare to use exports for your own packages (though there are definitely legitimate cases).
You can see evidence of this in Bazel's error messages too. Sometimes when you try to import a new class but haven't added the dependency you'll get the classic "Class not found" error from javac. Other times, you'll get the "missing transitive dependency" error from Bazel and no error from javac. The first case happens when you reference a class that isn't known to any of your dependencies, so neither javac nor Bazel have any idea what class you're talking about. The second case happens when the class you're looking for is referenced by one of your dependencies, so javac and Bazel know what it is, but Bazel's helpfully refusing to continue until you make your dependency on that class explicit so that other people can't accidentally break you.
Not sure if that's exactly what you were asking, but I hope it helps!