Pages and widgets have a lot in common. Both are meant to contain content. And, both pages and widgets are based on object classes that define the types of content the actual pages or widgets, respectively, are meant to contain. Thus, we are actually talking about page types and widget types, not the pages and widgets based on these types.
Page and widget types are different, however, regarding the structures produced when you create instances of them. While a page is represented by an individual CMS object, a widget is stored inside an attribute of such a CMS object. Thus, a page type requires a controller while a widget type doesn't.