The package is old and the definition is missing a \ltx@sh@ft that helps correct such positioning. A more modern definition for the \U macro is
\newcommand*\U[1]{\oalign{#1\crcr\hidewidth\ltx@sh@ft{-3ex}%
\vbox to .2ex{\hbox{\u{}}\vss}\hidewidth}}
In your own file you will need to enclose this in a \makeatletter...\makeatother pair. If you are loading the semtrans package you will need to use \renewcommand* instead.

\documentclass{article}
\usepackage{semtrans}
\makeatletter
\renewcommand*\U[1]{\oalign{#1\crcr\hidewidth\ltx@sh@ft{-3ex}%
\vbox to .2ex{\hbox{\u{}}\vss}\hidewidth}}
\makeatother
\begin{document}
Upright position: \U{h}
Italic position: \textit{\U{h}}
\end{document}
The above is modelled on the definition of the \b accent defined in the LaTeX kernel, namely:
\DeclareTextCommand{\b}{OT1}[1]
{\hmode@bgroup\o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-3ex}%
\vbox to.2ex{\hbox{\char22}\vss}\hidewidth}\egroup}
You could thus mimic this completely and use
\makeatletter
\DeclareTextCommand{\U}{OT1}[1]
{\hmode@bgroup\o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-3ex}%
\vbox to.2ex{\hbox{\u{}}\vss}\hidewidth}\egroup}
\makeatother