From the docs:
A viewlet to me is a self sufficient view. A view that can live on its own, its data is pre-fetched and can just be renderer as is. What in the world is this? Well, imagine a portal, in which each section of the portal is self-sufficient, with controls and data. You don't want to call all the handlers for this data for every single piece. Its not efficient, you need to create a separation. Well, a viewlet is such a separation and all it comes down to, its that its a view that calls an event for data preparation. You can simulate this to a page controller.