Before we start creating our package, here are a few words about the functionality and purpose of packages:
They can hold a single or several themes together
You can include blocks which your theme needs
You can check the requirements during the installation process in case your package depends on other blocks, configurations, and so on
A package can be used to hook into events raised by concrete5 to execute custom code during different kinds of actions
You can create single pages for custom functionality and dashboard pages
You can create jobs that run periodically to improve or check things in your website
These are the most important things you can do with a package. Some of what you can do doesn't depend on packages, but is easier to handle if you put it in packages. It's up to you, but putting every extension in a package might even be useful if there's just a single element in it—why?