First of all, you can create public inner classes (even static that do not share any relationship with the enclosing class.
As for fully-fledged 'Top-Level-Classes', it is possible to only have one public class per file).
First of all it is always better in terms of source control to have each class in a separate file.
Imagine you put 5 classes into one file, it quickly becomes harder to still have the picture of your project.
There are, of course, exceptions. If there is a small helper class that's sole purpose is to do a little thing in the enclosing class, then an InnerClass or Anonymous class would just do fine.
Second of all, more than one class per file ultimately results in more code. Which is not what you want due to code maintainability and the concept of cohesion.
Hence it might be that the architects of Java simply have decided to restrict java files to have one Top-Level-Class per source file.
JDBCSupport - An easy to use, light-weight JDBC framework -