in effetti non ho mai provato a "sparare" del codice dentro un elemento script creato dinamicamente e non so se sia possibile fare qualcosa di questo genere.

Ad ogni modo il problema potrebbe derivare dal fatto che nella terza riga stai usando innerHTML per un elemento che ancora non esiste a livello di DOM, quindi io proverei così

codice:
var oScript=document.createElement("SCRIPT");
oScript.setAttribute("id", num + '_script');
document.body.appendChild(oScript);
document.getElementById(num + '_script').innerHTML = "new Ajax.Autocompleter('testo["+num+"]', '"+num+"_complete', 'calcola-ajax.php', {}); ";
Ciao

Edit: oppure

codice:
var oScript=document.createElement("SCRIPT");
oScript.setAttribute("id", num + '_script');
oScript.innerHTML = "new Ajax.Autocompleter('testo["+num+"]', '"+num+"_complete', 'calcola-ajax.php', {}); ";
document.body.appendChild(oScript);