Custom components allow custom Visualforce functionality to be encapsulated as discrete modules, which provide two main benefits:
Functional decomposition: where a lengthy page is broken down into custom components to make it easier to develop and maintain.
Code reuse: where a custom component provides common functionality that can be reused across a number of pages.
A custom component may have a controller, but unlike Visualforce pages, only custom controllers may be used. A custom component can also take attributes, which can influence the generated markup or set property values in the component's controller to alter the business logic.
Custom components do not have any associated security settings; a user with access to a Visualforce page has access to all custom components referenced by the page.