Send Weekly Email if Users have not complete their profiles

At first view, the schefuled task code in your code seems ok. I just would suggest to introduce scheduled tasks clearing on plugin deactivation; this is useful for several reasons and one of them can be the origin of your problem: if you was testing, the scheduled event can be already set and this snippet in your code has no effect to schedule the event again:

if( ! wp_next_scheduled( 'enviar_email_a_preparadores' ) ) {
   wp_schedule_event( 1476118800, 'weekly', 'enviar_email_a_preparadores' );
}

This code should work:

add_filter( 'cron_schedules', 'intervalo_semanal_para_emails' );
function intervalo_semanal_para_emails( $schedules ) {

  $schedules['weekly'] = array(
    'interval' => 604800,
    'display' => __('Once Weekly')
  );

  return $schedules;

}

register_activation_hook( __FILE__, 'cyb_activation' );
function cyb_activation() {
    // Add a scheduled task on plugin activation
    // Fist run at 2016-10-10 17:00:00 UTC
    $time = new DateTime( "2016-10-10 17:00:00", new DateTimeZone( 'UTC' ) );
    if( ! wp_next_scheduled( 'cyb_weekly_event' ) ) {
        wp_schedule_event( $time->getTimestamp(), 'weekly', 'cyb_weekly_event' );
    }

}

register_deactivation_hook( __FILE__, 'cyb_deactivation' );
function cyb_deactivation() {
    // Remove scheduled task on plugin deactivation
    wp_clear_scheduled_hook( 'cyb_weekly_event' );
}

// Hook a task to the scheduled event
add_action( 'cyb_weekly_event', 'send_email_to_uncompleted_profiles' );
function send_email_to_uncompleted_profiles() {
    // log a message to test.
    // Check error.log file in your server
    // See error_log() docuemntation if you want to
    // set a custom error.log file path
    error_log( 'Test!!' );

    /*
    if( true === $condition_to_send_email ) {
        wp_mail( ... );
    }
    */

}

Once you have set up the cron and check that it is working, you can start with the send mail test.

Unfortunately the code you posted include code for third party plugins and can not be tested as it is (also, third party plugins are off-topic here); anyway, you are echoing data and using if inside a value assigment. That makes your code to crash because a PHP syntax fatal error; for example, this code in your answer is wrong:

  $message .= '<ul>';
  $message .= if (! get_field('descripcion_breve', $user_id_acf)) {
    echo '<li>' . $descripcion_breve . '</li>';
  }

There are several ways to concatenate strings, for exmaple, a simple option:

  $message .= '<ul>';
  if ( ! get_field( 'descripcion_breve', $user_id_acf ) ) {
    $message .=  '<li>' . $descripcion_breve . '</li>';
  }

I hope you see the difference.