A possible solution: it does use nodes (the question too actually) by keys that insert paths (both in horizontal axis horizontal label and vertical axis vertical label way).
The alignment is preserved by accessing the last coordinate of the path thanks to Extract x, y coordinate of an arbitrary point in TikZ. The width/height of the arrow, according to axis horizontal label/axis vertical label selected mode, can be customized through devoted keys as the second example shows.
The code:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
% Code by Peter Grill:
% https://tex.stackexchange.com/a/33706/13304
\newdimen\xval
\newdimen\yval
%\newcommand*{\getxyval}[1]{\path (#1); \pgfgetlastxy{\xval}{\yval};}%
\pgfkeys{/tikz/.cd,
axis label distance/.initial=0.5,
axis label distance/.get=\axislabeldist,
axis label distance/.store in=\axislabeldist,
axis label width/.initial=1,
axis label width/.get=\axislabelwd,
axis label width/.store in=\axislabelwd,
lb option/.style={midway, fill=white, inner sep = 2pt},
append horizontal label/.style={
insert path={
\pgfextra{
\pgfgetlastxy{\xval}{\yval};
\draw[<-,>=stealth]
($(\xval,\yval)-(0,\axislabeldist)$) --
($(\xval,\yval)-(\axislabelwd,\axislabeldist)$)
node [lb option]{$#1$};
}
}
},
append horizontal label/.default={},
append vertical label/.style={
insert path={
\pgfextra{
\pgfgetlastxy{\xval}{\yval};
\draw[<-,>=stealth]
($(\xval,\yval)-(\axislabeldist,0)$) --
($(\xval,\yval)-(\axislabeldist,\axislabelwd)$)
node [lb option]{$#1$};
}
}
},
append vertical label/.default={}
}
\begin{document}
\begin{tikzpicture}
\draw (-.5,0)--(3.5,0)[append horizontal label=r] ;
\end{tikzpicture}
\begin{tikzpicture}[axis label distance=0.25cm,
axis label width=0.75cm]
\draw (-1.5,-1.5)--(-1.5,3)[append vertical label=y] ;
\draw (-2,-1)--(4,-1)[append horizontal label=x];
\end{tikzpicture}
\end{document}
The result:
