Custom general settings (textarea field) don’t output HTML correctly

It’s because you’re using esc_html to sanitize the setting, which converts all the <,> etc. into HTML entities, like &gt;, which render as < but aren’t treated as those characters in terms of HTML, which is why tags aren’t rendering correctly. esc_html is supposed to be use for outputting HTML so that the markup is visible to the reader.

If you want to sanitize HTML, use wp_kses_post as the sanitization callback.

EDIT: Suggest wp_kses_post, rather than wp_kses, as per Tom’s comment.