Module elements define how Javascript and css assets are deployed on the website you are building. You can choose which module to associate with each region, page, component etc and the assets produced by that element will be deployed according to that module's configuration.
For example you might have some cross-cutting assets that are used on virtually every page on your website and should be deployed site wide whereas other elements might be specific to a small number of pages and can be collected up into one Javascript asset and deployed only to pages that need them. To do this you would define two modules and and choose the appropriate module for each element of your website.
Note that elements inherit the module from their parent element by default so you only need to override this at strategic points. The only exception to this are pages (which have no parent element) and default to deploying assets site wide without using modules.
Modules have an AssetDeployment property that defines how the assets associated with this module are deployed. The general idea is that every page element (region, layout, component etc) is configured to be part of a module and that module's configuration determines how the Javascript and CSS for that page element will be incorporated into the website
The possible values for the AssetDeployment property are:
Note that you can mix up the asset deployment properties as much as you want, even within a single page.
Packages are a way of isolating a chunck of reusable functionallity that can include html, css, Javascript, services and back-end logic. Packages are typically added to a website to add some functionallity to that website.
Modules are a way for the application developer to group elements together by the method used to deploy their assets. Becasue these are very different use cases, it does not make sense to build a package that contains modules, and this is not supported by the framework.
Although in theory you could write a custom module that inherits from the built-in Module class or implements the IModule interface, there is very little point in doing so because the module provides no functionallity.