OK, then it's probably just because the use of the form input radio there is not really correct html... ;)
It might be more corss-browser compatible if there is an actual form that does a submit on change. Like this:
...
<form class="ab-sub-wrapper" target="#" method="get">
<ul id="wp-admin-bar-languages-default" class="ab-submenu">
<li id="wp-admin-bar-all">
<label><a class="ab-item" href="http://status301.net/wp-admin/?lang=all">
<input name="lang" type="radio" value="all" onchange="this.form.submit();" />
Show all languages</a></label></li>
<li id="wp-admin-bar-en">
<label><a class="ab-item" href="http://status301.net/wp-admin/?lang=en">
<input name="lang" type="radio" value="en" onchange="this.form.submit();" />
English</a></label></li>
<li id="wp-admin-bar-nl">
<label><a class="ab-item" href="http://status301.net/wp-admin/?lang=nl">
<input name="lang" type="radio" value="nl" onchange="this.form.submit();" />
Nederlands</a></label></li>
<li id="wp-admin-bar-fr">
<label><a class="ab-item" href="http://status301.net/wp-admin/?lang=fr">
<input name="lang" type="radio" value="fr" onchange="this.form.submit();" checked="checked" />
Français</a></label></li>
</ul>
</form>
...
Notice the wrapper div is now a form with GET method and the input radio tags use their name (should all have the same) and value attributes differently... This way, both a link click as an input field change should result in the same thing :)