Не вижу ответа на последний вопрос.
Что мешает сделать в контроллере проверку типа
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
//include ('header.php');
include ('body.php');
//include ('footer.php');
}
?? Кроме того, что мешает обернуть ответ в json и передать помимо контента, другие блоки, те что реально изменились.