ahora he estado analizando mentalmente el código y me he dado cuenta de lo alejada que estaba de lo que me indicastes. y yo pensando que lo había entendido.
hay un par de cosas que no entiendo 
 Cita:  return{
append: function(item){
return steps.push(item);
},
 
undo: function(){
return steps.pop();
}
}}();
    ¿Por qué se necesita el return?
¿Qué es lo que hace esos parentesis al final final? Creo entender que es para invocar a la función que está asignada la varible 
muchimas gracias por haberte molestado