no creo que sea tan complicado... se me ocurre que puedes crear una función que asigne eventos para un estado en particular. en realidad no es tan así... mas bien te enfocas en el aspecto del qué hacer para dicho estado mientras la función se encarga de invocar el argumento para el estado en particular. obviando la parte de un contenedor general para ajax.
Código:
var req = new XMLHttpRequest();
req.sucess = function(handler){
this.addEventListener('readystatechange', function(){
if(this.readyState == 4 && this.status == 200) handler.apply(this, arguments);
}, true);
};
req.sucess(function(){ console.log(arguments, this); });