How do I make header.php use different css for different pages?

Create a primary stylesheet and enqueue as normal. Then, make a series of conditional statements using WP core functions – is_home(), is_404(), is_page_template('template.php') and so on. In each of those conditionals, enqueue the stylesheet you want that overwrites your core stylesheet, using your primary (style.css) stylesheet as a dependency.

Untested code, but should work:

function my_styles() {
    wp_deregister_style( 'header' );
    wp_register_style( 'style', get_template_directory_uri() . '/css/style.css' );
    wp_enqueue_style( 'style' );
    if (is_home()) { wp_enqueue_style('homestyle', get_template_directory_uri(). '/css/homestyle.css', 'style'); }
}
add_action('wp_print_styles', 'my_styles');