1- tu définis "e" avant que la page soit chargée du coup il n'y a pas encore d'élément avec pour id "p1".
2- la modification d'un attribut par element.attribut=valeur est évènementielle, elle ne modifie pas réellement l'attribut mais applique la modification lors de son appel. Enfin je crois, de toute manière ton attribut n'est pas définit, il faut l'ajouter, l'utilisation de setAttribute est alors plus propre.
3- un évènement onLoad sur le body suffit, mais vu comment tu manipules cela c'est que tu ne dois faire un script greasemonkey car autrement tu mettrais directement les attributs dans les balises.
Du coup ça te donne :
window.onload = pagechargee;
function pagechargee() {
var e = document.getElementById('p1');
e.setAttribute('onMouseover', 'surp1();');
e.setAttribute('onMouseout', 'plusurp1();');
}
function surp1() {
alert('appel1');
}
function plusurp1() {
alert('appel2');
}