For theme options modified through the
get_theme_mod() instead of
get_option() to retrieve the value.
The difference is, that for the latter the settings are preserved per theme and thus you could possibly have different options on different themes you might switch on occasion.
To have a fallback value when the setting is unchanged or not set, you can use the
default-value as you already do in your code:
$wp_customize->add_setting('menu_color', array( 'default' => '#000', 'sanitize_callback' => 'sanitize_hex_color', ) );