These were added back in 2004 (MediaWiki 1.2.4) by @GWicke with 0340509d5200. They've survived many refactors (split off from Skin into ChangesList etc) but are still there:
includes/changes/ChangesList.php#L341:
$diffLink = Linker::linkKnown( $rc->getTitle(), $this->message['diff'], array( 'tabindex' => $rc->counter ), $query );
<div class="mw-changeslist"><h4>21 October 2015</h4> <ul class="special"><li ..>(<a href tabindex="1">diff</a> | ..</li> <li ..>(<a href tabindex="2">diff</a> | ..</li> ..
At least they can probably be given the same tabindex since browsers naturally spread sequential context anyway (similar to z-index).
This came up in an audit of tabindex use which affected the search bar in the Vector skin, where the JavaScript assigns it the highest known tabindex +1 (source), which behaves a bit odd on Special:RecentChanges.
What is this tabindex for? Can the usecase be satisfied with a different solution?