Ah, sorry, I wasn't very clear.
Elasticsearch data at a low level is stored in "segments". One shard will be composed of many segments. Segments are immutable (once written, we never change them until they are deleted), and some of these segments can be very long-lived.
So when we snapshot an index, we make a note of all active segments and transfer the segment contents to the repository.
When a second snapshot is made, we make a note of all active segments and see which segments are new compared to what we've stored in the repository. Only the new segments are sent. If some of the segments have been deleted between the first and second snapshot, nothing happens. We know they aren't used in the second snapshot, but the first snapshot is still using them. If we were to delete the now-unused segments we'd corrupt the old snapshot.
However, if you delete the first snapshot, Elasticsearch will compare the two snapshots and find all segments that are only used by the first, and delete just those. So it basically does a delta-delete between the snapshot and all other snapshots, just removing the unneeded ones.
Hope that helps clear things up. Basically, you won't see any space reclaimed in the snapshot repository unless you also delete old snapshots. And even then, the amount reclaimed may be variable. E.g. if you snapshot an index twice very quickly, the segments won't have changed, so the snapshots will be identical. Deleting the first snapshot won't change anything.