One can also borrow the code of -| operator. I should call it -\ but then I need to hack the parser of TikZ. (\tikz@lineto, line 2699 of tikz.code.tex)
Notice that there are three changes in the definition of \tikz@@hv@lineto. The third corresponds to -| between explicit coordinates. The first two correspond to the node case.
Notice also that I did nothing about \tikz@timer. Thus pos=.5, midway, or their family is not going to work properly.

\documentclass[tikz,border=9]{standalone}
\makeatletter
\def\tikz@@hv@lineto#1{%
\edef\tikz@timer@start{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}%
\pgf@xc=\tikz@lastx% NEW LINE
\pgf@yc=\tikz@lasty%
\tikz@make@last@position{#1}%
\edef\tikz@tangent{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\pgf@yc}}%
\tikz@flush@moveto@toward{\pgfqpoint{\tikz@lastx}{\pgf@yc}}\pgf@x\pgf@yc%
\iftikz@shapeborder%
% ok, target is a shape. have to work now:
{%
%\pgf@process{\pgfpointshapeborder{\tikz@shapeborder@name}{\pgfqpoint{\tikz@lastx}{\pgf@yc}}}% Replace by the following
\pgf@process{\pgfpointshapeborder{\tikz@shapeborder@name}{\pgfpoint{\tikz@lastx-sign(\tikz@lastx-\pgf@xc)*abs(\pgf@yc-\tikz@lasty)}{\pgf@yc}}} % NEW LINE
\tikz@make@last@position{\pgfqpoint{\pgf@x}{\pgf@y}}%
%\tikz@path@lineto{\pgfqpoint{\tikz@lastx}{\pgf@yc}}% Replace by the following
\tikz@path@lineto{\pgfpoint{\tikz@lastx-sign(\tikz@lastx-\pgf@xc)*abs(\pgf@yc-\tikz@lasty)}{\pgf@yc}} % NEW LINE
\tikz@path@lineto{\tikz@last@position}%
\xdef\tikz@timer@end@temp{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% move out of group
}%
\let\tikz@timer@end=\tikz@timer@end@temp%
\edef\tikz@moveto@waiting{\tikz@shapeborder@name}%
\else%
%\tikz@path@lineto{\pgfqpoint{\tikz@lastx}{\pgf@yc}}% Replace by the following
\tikz@path@lineto{\pgfpoint{\tikz@lastx-sign(\tikz@lastx-\pgf@xc)*abs(\pgf@yc-\tikz@lasty)}{\pgf@yc}} % NEW LINE
\tikz@path@lineto{\tikz@last@position}%
\edef\tikz@timer@end{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% move out of group
\fi%
\let\tikz@timer=\tikz@timer@hvline%
\tikz@scan@next@command%
}
\begin{document}
\begin{tikzpicture}
\node(a){a};
\node(b)[below right of=a, xshift=2cm]{b};
\node(c)[below left of=a, xshift=-2cm]{c};
\node(d)[above right of=a, xshift=2cm]{d};
\node(e)[above left of=a, xshift=-2cm]{e};
\draw(a.south east)-|(b.north west);
\draw(a.south west)-|(c.north east);
\draw(a.north east)-|(d.south west);
\draw(a.north west)-|(e.south east);
\end{tikzpicture}
\begin{tikzpicture}
\node(a){a};
\node(b)[below right of=a, xshift=2cm]{b};
\node(c)[below left of=a, xshift=-2cm]{c};
\node(d)[above right of=a, xshift=2cm]{d};
\node(e)[above left of=a, xshift=-2cm]{e};
\draw(a)-|(b);
\draw(a)-|(c);
\draw(a)-|(d);
\draw(a)-|(e);
\end{tikzpicture}
\end{document}