get_post() function returns post even if it is trashed

That’s not how get_post() works. Trashing the post doesn’t change the value of the theme mod, and the theme mod is still going to point to that post in the database, so get_post() will dutifully retrieve it as long as it’s there.

It’s up to you to make sure its status is what you want before display:

$featured_post = get_post( get_theme_mod( 'featured_post_id' ) );

if ( $featured_post && $featured_post->post_status === 'publish' ) {
    // Display post
}

You could also do a WP_Query or get_posts() (plural) to query posts with the status publish and the ID that you have, but it’s probably going to end up more lines of code and slightly slower than just checking the status anyway.