Index: src/wp-includes/class-wp-customize-manager.php
===================================================================
--- src/wp-includes/class-wp-customize-manager.php	(revision 35000)
+++ src/wp-includes/class-wp-customize-manager.php	(working copy)
@@ -191,12 +191,31 @@
 		require_once( ABSPATH . WPINC . '/class-wp-customize-panel.php' );
 		require_once( ABSPATH . WPINC . '/class-wp-customize-section.php' );
 		require_once( ABSPATH . WPINC . '/class-wp-customize-control.php' );
-		require_once( ABSPATH . WPINC . '/class-wp-customize-widgets.php' );
-		require_once( ABSPATH . WPINC . '/class-wp-customize-nav-menus.php' );
 
-		$this->widgets = new WP_Customize_Widgets( $this );
-		$this->nav_menus = new WP_Customize_Nav_Menus( $this );
+		/**
+		 * Filter the core Customizer components to load.
+		 *
+		 * @since 4.4.0
+		 *
+		 * @see WP_Customize_Manager::__construct()
+		 *
+		 * @param array                $components List of core components to load.
+		 * @param WP_Customize_Manager $this       WP_Customize_Manager instance.
+		 */
+		$components = apply_filters( 'customize_components_to_load', array( 'widgets', 'nav_menus' ), $this );
 
+		switch( $components ) {
+			case 'widgets' :
+				require_once( ABSPATH . WPINC . '/class-wp-customize-widgets.php' );
+				$this->widgets = new WP_Customize_Widgets( $this );
+				break;
+			case 'nav_menus' :
+				require_once( ABSPATH . WPINC . '/class-wp-customize-nav-menus.php' );
+				$this->nav_menus = new WP_Customize_Nav_Menus( $this );
+				break;
+			default : break;
+		}
+
 		add_filter( 'wp_die_handler', array( $this, 'wp_die_handler' ) );
 
 		add_action( 'setup_theme', array( $this, 'setup_theme' ) );
