It sounds like the way to handle this is to use a global array in your theme's functions.php, and add to it whenever one of these shortcodes is processed. Finally, a filter on the_content can be used to place the extra links at the top.
Start by initializing the global:
add_action( 'after_setup_theme', 'update_init' );
function update_init() {
global $update_links;
$update_links = array();
}
Then add the following code to your shortcode processing function:
global $update_links;
$update_links[] = "<a href='#$title-$date'>$title - $date</a>";
The above also assumes that your shortcode replacement includes an anchor tag of $title-$date.
Finally, add a content filter to add the update links to your content:
add_filter( 'the_content', 'the_content_update_links', 90);
function the_content_update_links($content) {
global $update_links;
if(count($update_links)) $content = implode("<br />", $update_links).$content;
return $output;
}
You can change the way the links are put together - I just put a break between them but it would be simple to loop through and create an unordered list or wrap the links in a div.