Você trouxe bons pontos. E dada a proposta simplificada que usei pra apresentar a ideia, realmente, fica inviável aplicar em cenários reais.
Acredito que falhei em não adicionar a este contexto qual foi a inspiração, e olhando agora, acho que dava pra fazer uma implementação mais completa sem perder a simplicidade.
Mas a ideia da abstração foi "chupinhada" da abordagem de compensação de transações que o "Saga Pattern" implementa para ambientes distribuídos, aonde cada etapa da transação possui um mecanismo de compensação para que, em eventual falha na cadeia de um workflow distribuído, seja possível a reversão da transação.
Como ali, injetei o snapshot na camada de gestão de dados fica ainda mais complicado de associar com a ideia que mencionei acima.
Mas usando este comentário como oportunidade pra acrescentar um pouco mais ao texto, Eu diria que o ideal é que em camadas superiores, um workflow possa permitir tirar uma "fotografia" do estado atual das entidades relacionadas à operação, e ao gravar isso, possamos retroceder se necessário.
Isso faria da compensação, em linhas bem gerais, uma operação de atualização que reutiliza os dados anteriores à última edição.
Por exemplo, no caso do código que coloquei de exemplo, o correto seria mover a gestão do snapshot para a camada de negócios (casos de uso).
Bons estudos e um forte abraço!