The soulutf8 package loads the soul package and adds utf8 support. The following code is based on the soul documentation, § 22 Nested soul commands:
\documentclass{article}
\usepackage{xcolor}
\usepackage{soulutf8}
\begin{document}
\newbox\mybox
\sbox\mybox{ \ul{AAAA} }
\hl{ AAAA {\usebox\mybox} AAAA}
\end{document}
Result:

The basic idea is that you put the inner text in a box, which computes the underlining, and then call this box in the outer text. If you try to do it directly the two simultaneous size computations become problematic.
Related questions with the same problem but different (and easier to use!) solutions:
Mixing underline and strike-out
Follow-up: Underline + strike-through using soul