Managed packages differ from unmanaged packages by the use of protected components that allow the managed packages to be upgraded by the developers, perhaps to add new functionality or to refactor in any changes in the Salesforce environment. By protecting certain components such as Apex Code, managed packages also serve to protect the intellectual property of the developer organization.
Unmanaged packages, on the other hand, do not protect components, and are therefore static within your organization as they cannot be upgraded by the publishing developer. They allow you to access all of the implemented customization or code and can be useful if you want to change or extend the functionality yourself.
To summarize, these are some of the reasons why I very much prefer to use managed solutions in all environments that are not development environments:
Solutions can be installed into multiple layers.
You can build solutions on top of other solutions (solution-level dependencies).
Additional change management control.
Option to turn on managed properties on solution components.
Capability to uninstall a solution and roll-back to a previous customization state.
Solution publisher can truly own solution components.
The only disadvantage I have found so far with managed solutions is that certain solution components, such as entities, attributes and reports cannot be deleted directly once they are managed.