When it was created, the Java compiler did not require a particular directory layout in order to work correctly. It's a design that's really nice for small projects, because I can have a handful of source files in a single directory, and each one can have whatever package declaration it needs. It gives the programmer a lot of control over where files are placed, but along with the extra control comes the cost of doing the work to organize things manually. It's not a design that scales well, however, which is why for any organized tree of source code the package declaration really looks like it's redundant. One good reason to use an IDE is to avoid the manual effort of managing your source files, which can be quite tedious.
The only environment I know of that lets you organize your code without these types of redundant hierarchy specifiers is Smalltalk. Most Smalltalk systems work with a live image, so you don't have a bunch of individual source files to manipulate. Instead, you directly manipulate classes and methods. The idea of manually manipulating thousands of source files is foreign to Smalltalk systems.