The Simple Yearly Archive Plugin does just that.
This code will also do the trick:
<?php
// get years that have posts
$years = $wpdb->get_results( "SELECT YEAR(post_date) AS year FROM wp_posts WHERE post_type="post" AND post_status="publish" GROUP BY year DESC" );
foreach ( $years as $year ) {
// get posts for each year
$posts_this_year = $wpdb->get_results( "SELECT post_title FROM wp_posts WHERE post_type="post" AND post_status="publish" AND YEAR(post_date) = '" . $year->year . "'" );
echo '<h2>' . $year->year . '</h2><ul>';
foreach ( $posts_this_year as $post ) {
echo '<li>' . $post->post_title . '</li>';
}
echo '</ul>';
}
?>
There may be room to optimize that, but I’ve tested and it works.