In your benchmarks, you acknowledge that pairwise diffs can produce smaller downloads, then dismiss them because you need N² of diffs. That’s technically true if you want to go from one arbitrary version to any other arbitrary version in one step, but nobody actually uses pairwise diffs that way.
The most common use of pairwise diffs only creates diffs between adjacent pairs, because by far the most common use case is going from one version to the next version. This provides optimal download sizes so long as no versions are skipped. Only N diffs are needed.
If skipping versions is common, one neat trick is to only provide power-of-two diffs between versions that are themselves powers of 2, i.e. pairwise diffs between adjacent diffs in the sequences 0-1-2-3-4-…, 0-2-4-6-8-10…, 0-4-8-16-32…, 0-8-16-32-64… and so on. This only requires 2N diffs and allows you to move between arbitrary versions with only O(2 log M) steps, where M is the distance between the versions.
Finally, if new versions are very frequent and very similar to each other, there’s always the trick of setting one version (the first one, or the one after the last major change) as the “base” version and only storing diffs to and from the base version. This only requires N diffs (recalculated each time the base version changes) and 2 diffs to change from one arbitrary version to another arbitrary version, at the cost of potentially very large diffs.