Customizer: How to change Header Image description

The description param unfortunately is not used in this control. You can see that the message is hard-coded in the control’s template. That should be changed in core, but in the mean time, you can enqueue some JS at the customize_controls_enqueue_scripts action with the dependency of customize-controls which does this:

wp.customize.control( 'header_image', function( control ) {
    control.deferred.embedded.done( function() {
        var el = control.container.find( '.customize-control-description' );
        el.html( control.params.description );
    } );
} );

This JS will continue to work if the control’s description param starts to be used in core in a future release.