The package resource simply ensures that a package is installed. It abstracts the package managers so that you don't need to know if you're using yum or apt, for example.
A module is a way to group a bunch of resources together that are more complex than a single package. Think about how you would deploy a tomcat web application, and configure it. You might have a module that takes a few parameters. In the test environment, you might pass in the connection string of a test database. Your module would then place the correct war file in the appropriate tomcat path, then create a config file with the database connection string, and then restart tomcat. This flow requires multiple resources, and allows the same code to be re-used at all stages of the deployment lifecycle. A production server would use the exact same module, but with a production database connection string.
Once you get modules down, then you can start applying different modules together on nodes. Continuing the example, a webserver node would probably have the following modules applied: java, tomcat, yourwebapp. The modules are best kept separate so that you can re-use them. For example, if you wanted to build a cassandra node, you might use the java module, and a cassandra module. There's no need to re-write the java code because it already exists.