Wordpress's Sticky Posts behaviour is still incomprehensible, let's fix it.
Simply injects the sticky post IDs into the actual mySQL order by clause, causing posts to be ordered by sticky status then by what ever order is specified, usually post_date DESC, and not to repeat on subsequent pages. I can't actually figure out why it isn't done like this by WP, perhaps earlier versions of mySQL don't support this. WP's default sticky ordering craziness is turned off by returning an empty array for the next call to get_option('sticky_posts') which happens in WP_Query->get_posts().
There is currently a ticket awaiting review on the WordPress trac system to roll this functionality into the WordPress core: http://core.trac.wordpress.org/ticket/21986