Puedes usar ob_start() ob_get_clean() para guardar en una variable el contenido generado por un include. Y luego sarcar el contenido en el orden que quieras:
Código PHP:
<?php
if($_GET['sec']) {
ob_start();
include_once('secciones/' . $_GET['sec'].'.php');
$contenido=ob_get_clean();
}
//Muestro el header
include_once('header.php');
//En esta parte es la navegación dinámica y llamada al archivo.
echo $contenido;
//Muestro el pie
include_once('pie.php');
?>
Como ejectuas primero el codigo de la seccion, puedes crear ahi las variables que leeran header.php y pie.php.
Y si, usar un array para las secciones es mas seguro. Imagina que tienes en /config.php la configuracion de acceso a tu base de datos. ¿Que pasa si a tu script le pasas ?sec=../config ? Que el include cargara 'secciones/../config.php'.