dabei muss man aber berücksichtigen, das dann das Script im Scope von onreadystatechange läuft.
Das kann man ja nach Aufgabe auf verschiedene Weisen umgehen. Womöglich einfach so:
<?php
$data['innerHtml']='Das ist <b>fett</b>!';
$data['script']='document.getElementById("myButton").onclick=function () { alert("Ist das nicht fett?"); };';
echo json_encode($data);
?>
und
<! doctype html>
<html>
<body>
<h1>Test</h1>
<div id="foo">Das ist dünn.</div>
<button id="myButton">KlickMich!</button>
<script>
function worker() {
    var data;
    var objekt=document.getElementById('foo');
    var xmlHttp = new XMLHttpRequest();
    if (xmlHttp) {
        xmlHttp.open('GET', 'test_0001.php', true);
        xmlHttp.onreadystatechange = function () {
            if (xmlHttp.readyState == 4) {
                data=JSON.parse(xmlHttp.responseText);
                objekt.innerHTML=data['innerHtml'];
                eval(data['script']);
            }
        };
        xmlHttp.send(null);
    }
}
worker();
</script>
</body>
</html>
Ich weiß ja zudem nicht, was für "Funktionen" da übertragen werden sollen. Vielleicht reicht es ja aus, Dokument-globale Variablen neu zu setzen, die dann von einer Funktion genutzt werden.