Packages in Java provide three main benefits: reusability, allowing classes with the same name in different packages, and hiding classes to prevent other packages from accessing them. Packages are organized hierarchically, so sub-packages can be created within packages. Classes within a package are accessible to other classes in the same package, and classes declared public in one package are accessible to another package.