Как организовать инкрементальный бэкап S3?
Как чисто "наколенный" вариант, использовать:

EC2 инстанс с запускаемым софтом:
1. Монтирование S3 (source, target) в качестве папки: goofys или s3fs.
2. В качестве резервирующего ПО: Bup для дедупликации. Умеет подобно Git...
На входе папка исходного бакета, а на выходе - целевая.

Сам не пробовал. Просто как идея.
Чтобы восстановить нужную версию инкрементального бакапа, необходимо пройти по всей истории изменений, восстанавливая шаг за шагом. Ваш заказчик должен это понимать либо получит бомбу замедленного действия и невозможность оперативно воспользоваться бакапом (к примеру у вас 100-тб архив, с ежеденевными инкрементальными бакапами, хранящими по паре сотни гигабайт в дифах, чтобы восстановить данные за год архивации, потребуется загрузить с aws порядка трех петабайт данных, понятно делать это лучше внутри самого амазона, так как трафик у них прямо золотой).

Чтобы не хранить и не пробегать по всей истории, каждый раз когда делаешь бакап, нужно обновлять хвостовой (стартовый) сдвигая его на самый старый дифф (и удаляя его).

p.s. убери из требований zip архив (точнее не храни его так, формируй по требованию), тогда резервирование можно оптимизировать на уровне файлов или даже файловой системы (например btrfs позволяет получать диф снапшота на лету в виде файла и вносить эти изменения в другом месте)