As Joomla! development practices have advanced, the demands placed on all aspects of Joomla! development have increased, including those placed upon modules. Developers began to desire more control over when and how modules were displayed without hacking the Joomla! core or their templates. For example, by only showing certain modules to certain user groups, browsers, or even to certain individual users.
However, templates always show the modules that the Joomla! core passes to them and can't control individual modules, only module positions. Also, the Joomla! core has only limited options for displaying modules, such as restricting a module to a certain access group or above (but not the reverse) and restricting it to certain menu item pages.
Sometimes, templates can be modified to perform extra filtering of modules. However, any changes are restricted to specific module positions, and moving them or changing the requirements requires recoding the template again.
As a result...