In realtà, se l'intera pagina viene ricaricata, il tasto indietro del browser funziona, mentre se usi AJAX no.
Io preferisco usare PHP proprio perché mi creo la struttura della pagina e le singole pagine che devono essere incluse nel box che simula il frame.
Tieni presente però che questa tecnica comporta alcuni "cambiamenti" nella creazione degli URI dei link, oppure ti obbliga a usare un file .htaccess.
In altre parole, tu hai una pagina (index.php) che fa l'inclusione della pagina PHP richiesta da un link. Questo link richiama sempre index.php passando in query string un parametro che indica quale pagina includere. Ti faccio un es. Un link fatto così:
index.php?p=about-us
contiene una query string che passa alla pagina stessa (index.php) un parametro (p) che vale "about-us". Ora, nella parte della pagina index.php contenuta nel box che simula il frame, devi recuperare il valore passato in query string ($_GET['p']) e includere il file PHP chiamato come il valore di questo parametro. Tradotto in codice PHP:
codice:
<html>
<head>
.....
<body>
<div id="menu">
<ul>
<!--
Tutti i link del menu puntano a index.php passando una query string diversa.
Il valore del parametro "p" della query string è il nome della pagina PHP da includere.
-->
[*]Chi siamo[*]Contatti[/list]
</div>
<div id="frame">
<?php
// Se l'array $_GET contiene un elemento "p" e questo elemento non è vuoto...
if (isset($_GET['p']) && $_GET['p']) {
/*
Controllo se esiste un file chiamato come il valore di "p" (con .php alla fine) e lo includo.
Nota che il file deve trovarsi nella stessa cartella del file index.php in cui usi questo script.
Ad es., cliccando su "Chi siamo", viene incluso il file chi-siamo.php.
*/
if (is_file($_GET['p'].'.php')) require_once($_GET['p'].'.php');
}
// Altrimenti, includo il file home.php (che contiene quello che appare in homepage).
else require_once('home.php');
?>
</div>
</body>
</html>
Tieni presente che è necessario conoscere un po' PHP per fare queste cose e comunque, qui iniziano i "problemi" legati alla sicurezza. Se si tratta di siti semplici che includono semplicemente un file PHP "statico", non ci sono grossi problemi, ma se i file PHP che includi iniziano a leggere da un database o peggio, ricevono in query string dei parametri da usare nelle query, è necessario pensare seriamente di diventare esperti di sicurezza! 
Non sto a spiegarti come funziona l'.htaccess (che ti servirebbe solo per la riscrittura degli URI in modo user-friendly e SEO-friendly, essendo questi sempre basati su query string).
Questo sistema è quello che usano i CMS per includere le parti di contenuto prelevate dal database o da file statici nel template.
Forse quello che ha proposto alexba64 è una cosa più fattibile per te, senza costringerti ad addentrarti nella programmazione PHP avanzata.