One could parse the argument of \hl to replace all \(...\) by $...$ in that argument and then use the original definition of \hl. I'm not entirely sure whether the following is completely stable, though it worked for everything I've thrown at it so far.
Edit: minimise code by removing case which is never matched (##3 is dot and ##2 is not) and not include the \(.\) tokens in every recursion of the replacement but only once (which suffices as those are in ##3 in the case of a recursion).
Note that there are cases of valid but strange syntax (if used outside of the argument of \hl) which fail here: If one mixes $ and one of \( or \) as the delimiters the provided code fails; though $a^b\) or \(a^b$ would be valid syntax \hl{$a^b\)} and \hl{\(a^b$} would fail as they don't match the required argument pattern of \hl@grab.
\documentclass{article}
\usepackage{xcolor,soulutf8}
\usepackage[]{amsmath}
\usepackage{letltxmacro}
\LetLtxMacro\hlBAK\hl
\begingroup
\makeatletter
\catcode`.=4% changing catcode so the dot is never matched by ordinary text
\def\zz%
{\endgroup
\renewcommand\hl[1]
{%
\hl@grab##1\(.\)\endhl@grab
}%
\long\def\hl@grab##1\(##2\)##3\endhl@grab%
{%
\hl@grab@ifdot{##2}
{\hlBAK{##1}}
{\hl@grab##1$##2$##3\endhl@grab}%
}%
\long\def\hl@grab@ifdot##1%
{%
\ifx.##1%
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}%
}%
\zz
\begin{document}
Well, \hl{\(.e^{i\pi}=-1\) text \(2=2\).}
\end{document}

EDIT: The following provides a replacement using two macros, one to replace \( and one to replace \). As a result the strange (but technically correct) syntax of \(a^b$ and $a^b\) should also work as an argument to \hl (though this way \hl{\(a^b\( text $a^b$} would work, too, which is obviously not correct syntax).
\documentclass{article}
\usepackage{xcolor,soulutf8}
\usepackage[]{amsmath}
\usepackage{letltxmacro}
\LetLtxMacro\hlBAK\hl
\begingroup
\makeatletter
\catcode`.=4% changing catcode so the dot is never matched by ordinary text
\def\zz%
{\endgroup
\renewcommand\hl[1]
{%
\hl@grab@A##1\(.\endhl@grab
}%
\long\def\hl@grab##1\(##2\)##3\endhl@grab%
{%
\hl@grab@ifdot{##2}
{\hlBAK{##1}}
{\hl@grab##1$##2$##3\endhl@grab}%
}%
\long\def\hl@grab@A##1\(##2\endhl@grab%\)
{%
\hl@grab@ifdot{##2}
{\hl@grab@B##1\).\endhl@grab}
{\hl@grab@A##1$##2\endhl@grab}%
}%
\long\def\hl@grab@B##1\)##2\endhl@grab%
{%
\hl@grab@ifdot{##2}
{\hlBAK{##1}}
{\hl@grab@B##1$##2\endhl@grab}%
}%
\long\def\hl@grab@ifdot##1%
{%
\ifx.##1%
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}%
}%
\zz
\begin{document}
Well, \hl{\(.e^{i\pi}=-1\) text \(2=2\).}
\hl{$a^b)}\hl{(a^b$}
\hl{(a (b$ $}
\end{document}
Using etl as a faster, yet less versatile alternative to l3regex to also replace \( and \) inside of braces:
\documentclass{article}
\usepackage{xcolor,soul}
\usepackage{etl}
\NewCommandCopy\hlBAK\hl
\ExplSyntaxOn
\renewcommand\hl[1]
{
\exp_args:Ne \hlBAK
{
\etl_token_replace_all_deep:eNn
{ \etl_token_replace_all_deep:nNn {#1} \( { $ } }
\) { $ }
}
}
\cs_generate_variant:Nn \etl_token_replace_all_deep:nNn { e }
\ExplSyntaxOff
\begin{document}
\hl{\emph{Some important ( m = ath )}}
\end{document}
soulbut only under the conditions of the LPPL (which clearly allows you to modify the package locally -- redistribution only under certain conditions) – Skillmon Apr 11 '18 at 19:49