Pour le point n° 1, il s'agit d'une erreur de logique : je voulais atteindre le premier lien enfant de la première balise h3

br1o

Oki, dans ce cas le code précédemment donné en 2. devient :

$('#links h3')
	.hover(function() { $(this).css('color','#cf3500'); },function() { $(this).css('color','#ff7200'); })
	// équivalent à $("#links h3:first")
	.eq(0).css('font-size','1.5em')
	// recherche du premier élément lien enfant de l'élément qui suit
	// l'élément h3 (à savoir <ul />)
	.next().find('a:first').css('font-size','1.5em');

je ne comprend pas bien la différence entre les méthodes eq() et lt(), sachant que les valeurs sont censées commencer par zéro, mais qu'en mettant '3' ça prend les 3 premiers ul et non pas les 4 premiers...

br1o

La méthode eq() réduit le nombre d'éléments à celui dont l'index est passé en paramètre. L'index allant de 0 à n-1, eq(0) retourne logiquement le premier élément, eq(1) le deuxième, eq(2) le troisième, etc...

La méthode lt(), d'aspect similaire, réduit le nombre d'éléments à ceux qui précèdent l'élément dont l'index est passé en paramètre (l'index allant également de 0 à n-1)). Ainsi, lt(1) retourne les éléments précédants le deuxième élément, soit le premier. lt(2) retourne les deuxième et premier éléments. Et, pour finir, lt(0) ne retourne rien, puisqu'il n'existe aucun élément ayant un index inférieur à 0 ^^
Dans ton cas, $('#links ul:lt(3)') réduit donc le nombre d'éléments à ceux qui ont un index inférieur à 3, autrement dit du 4ème élément et par conséquent les 3 premiers ul ;-)

je vais me pencher dessus un peu plus pour bien comprendre, notamment cette histoire de double .end()

br1o

La méthode end() permet de retourner à l'état précédant la dernière manipulation DOM.
Par exemple $('#links').next().end() cherche dans un premier temps l'élément div#links puis passe au nœud frère qui suit, soit div#TLA. Finalement la méthode end() fait repasser la pile de jQuery à div#links.