The only question remaining would be the amount of data (i.e. filenames) you'll have to download per amount of data in the backups, which you can vary by adjusting the chunking size.
[1]: https://github.com/borgbackup/borg
[2]: https://restic.github.io/
[3]: http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET...
Edit: Of course, because S3's PUT OBJECT[4] is idempotent in this case (i.e. ignoring hash collisions as their probability should be orders of magnitude lower than a doomsday scenario), you could of course just transfer each chunk every time. Realistically, all this would do is hog your bandwidth and ruin your performance. That's why it's possible to make the whole thing lock-free; otherwise you could always run into the problem of uploading the same chunk twice.
[4]: http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT...