Vale creo que ya lo he entendido. Aplicando el concepto a mi ejemplo ( y omitiendo alguna cosa como lo del patrón singleton) yo hice algo como esto:
 
index.php 
 Código PHP:
    <?php
require 'FrontController.php';
FrontController::main();
 
?>    
  frontController.php 
 Código PHP:
    <?php
class FrontController
{
    static function main()
    {
        
 
        if(! empty($_GET['controlador']))
              $controllerName = $_GET['controlador'] . 'Controller';
        else
              $controllerName = "UsuarioController";
        
        //Lo mismo sucede con las acciones, si no hay accion, tomamos index como accion
        if(! empty($_GET['accion']))
              $actionName = $_GET['accion'];
        else
              $actionName = "index";
        
        $controllerPath =  $controllerName . '.php'; //mejorable, archivo de configuracion
            
        //Incluimos el fichero que contiene nuestra clase controladora solicitada    
        if(is_file($controllerPath))
              require $controllerPath;
        else
              die('El controlador no existe - 404 not found');
        
        //Si no existe la clase que buscamos y su accion, tiramos un error 404
        if (is_callable(array($controllerName, $actionName)) == false) 
        {
            trigger_error ($controllerName . '->' . $actionName . '` no existe', E_USER_NOTICE);
            return false;
        }
        //Si todo esta bien, creamos una instancia del controlador y llamamos a la accion
        $controller = new $controllerName();
        $controller->$actionName();
    }
}
 
 
?>    
  UsuarioController.php 
 Código PHP:
    <?php
class UsuarioController
{
    
    public function mostrarDatos()
    {
        include 'UsuarioModel.php';
        $model=new UsuarioModel();
        $datos=$model->getDatos();
        
        include 'usuarioView.php';
    }
   
}
?>    
  UsuarioModel.php:  
 Código PHP:
    <?php
class UsuarioModel{
 
    public function __construct(){
    }
 
    public function getDatos(){
            
        //Consultas a la BD
        // ............
        // ............
        
        $arrayDatos[]='Pepe';
        $arrayDatos[]='29';
        $arrayDatos[]='España';
        return $arrayDatos;
    
    }
 
}
 
?>    
  UsuarioView.php:  
 Código PHP:
   
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>MVC - Modelo, Vista, Controlador </title>
<style type="text/css">
.Estilo1 {color: #E8D2FF}
</style>
    
</head>
<body style="background-color:#0145A8;color:#D5E0F0;">
<h1>Datos principales:</h1>
<?php
    $nombre=$datos[0];
    $edad=$datos[1];
    $loc=$datos[2];
    echo "Nombre: $nombre";
    echo "<br />";
    echo "Edad: $edad";
    echo "<br />";
    echo "Localizacion: $loc";
?>
</body>
</html>   
  He simplificado algunas cosas con respecto al tutorial, me he saltado lo que ponía de 
view->show('vistaUsuario.php') y en lugar de hacer eso hago directamente
 include 'vistaUsuario.php'; porque me parecía más intuitivo esto último, hay algún inconveniente que deba tener en cuenta al hacer esto?? 
Por lo que entiendo de patrones y prácticas aconsejables en la orientación a objetos se supone que cada objeto debe realizar sus funciones, en este caso usuario se encargaría de sus accesos a la base de datos. 
Más o menos esta es la idea no?
Algo importante que se me haya quedado fuera? 
Muchas gracias!