Is it typical that data is fetched from within templates rather than in controllers?
From what I've seen so far of Craft and plugins developed for it, the requests are typically forwarded directly to Twig templates and those templates are responsible for analysing query strings and request data and fetching data from exposed template variables or built in "entries".


Not necessarily required.  You can register a custom CP route in your plugin and have a request routed directly to your plugin's controller action.

public function registerCpRoutes()
{
    return array(
        'path' =&gt; array('action' =&gt; 'pluginHandle/controllerAction')
    );
}


And have that controller render a the template directly, passing in whatever variables it needs:

$this-&gt;renderTemplate('pluginHandle/template', array('foo' =&gt; 'bar');