Widgets can be instanciated easily in your page by adding very simple attributes to any markup element.
Their logic is self contained, and they can operate fully without any custom development.
They allow you to quickly add units of content and functionality while still retaining the possibility to interact with the rest of your application.
The Markup those widgets use can be completely overriden using a system of Templates, described in depth in the developer documentation
See the Widgets reference for a list of available widgets