Hola Owl, bienvenido al foro.
Poco te puedo ayudar con tu problema, porque mis conocimientos no dan para ello, pero te mando un hilo de este foro donde se explica cómo simular pulsaciones mediante código:
http://www.clubdelphi.com/foros/show...lsacion+codigo
Así puedes centrar un poco tu problema:
* Recoger todos los eventos que se producen en tu programa e ir guardándolos en una pila.
* Si el usuario quiere Deshacer o Rehacer, muevete por la pila, simulando las pulsaciones anteriores.
Sigue informándo/preguntando en este foro, y los compañeros que sí saben, te ayudarán.
Saludos.