Package upgrades allow for the execution environment to be deployed and upgraded when the users starts their application.
Package upgrades allow you to keep a tight control over what is being deployed as each time you send a Package to the server to deploy you are creating a record of what has changed.