а также, наверно, есть большая разница между "в случае ошибки откатить, и конец" и "в случае ошибки откатить и снова пробовать до успеха"
Разница точно есть, так как некоторые транзакционные модели (STM и БД) предполагают перезапуск транзакции в случае неуспеха. Эффект тогда тоже будет перезапущен. И даже если у него есть обратная операция, повторный эффект может все равно не так же сработать