Il est possible d'exécuter une action JavaScript à la fin d'une animation jQuery, ce qui est impossible en CSS. Envie de faire disparaitre une page en fondu, lancer le chargement d'une autre page, puis faire apparaitre cette dernière en fondu toujours ? Avec les callbacks (des actions à exécuter une fois une animation finie), l'enchainement est très simple.
Edit : il est possible d'utiliser l'évènement transitionend sur les navigateurs le supportant pour lancer une action à la fin d'une transition CSS. Merci à Dorian Marchal pour cette information.
Les animations JavaScript seront lisibles sur un spectre de navigateur bien plus large. Même IE7 peut lire une animation JavaScript, alors que IE9 n'est pas capable de faire une transition CSS.
Les animations JavaScript sont mieux "optimisées" que les animations CSS pour travailler avec le JavaScript. En effet, la plupart des frameworks JavaScript vont prendre en compte l'exécution des animations lors de l'exécution d'autres codes javascript, ou même d'autres animations. Le résultat est que les animations JavaScript seront plus fluides dans certaines conditions (lorsque beaucoup de transitions s'appliquent en même temps).
Les animations JavaScript sont plus fiables que les animations CSS. En effet, certains navigateurs peuvent, aux files des versions, intégrer des bugs et artefacts visuels lors de l'exécution de transition (essayez beaucoup de transition plus des éléments en position fixe sur la même page sous chrome, vous m'en direz des nouvelles). Les animations JavaScript restent égales à elle-même.