The idea was creating decoration that draws half full half dashed vector. Based on percusse's suggestion I wrote the following MWE:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\usetikzlibrary{decorations}
\pgfdeclaredecoration{halfdashed}{initial}{%
\state{initial}[width=0.5*\pgfdecoratedpathlength,next state=final]{%
\pgfpathmoveto{\pgfpoint{0}{0}}%
\pgfpathlineto{\pgfpoint{0.5*\pgfdecoratedpathlength}{0}}%
\pgfusepathqstroke
}%
\state{final}{%
\pgfsetdash{{10pt}{10pt}}{10pt}%
\pgfpathmoveto{\pgfpoint{0}{0}}%
\pgfpathlineto{\pgfpoint{0.5*\pgfdecoratedpathlength}{0}}%
}}
\begin{tikzpicture}
\draw[line width=2pt,decorate,decoration={halfdashed},->] (0,1) -- ++(110pt,0);
\draw[line width=2pt,decorate,decoration={halfdashed},->] (0,0) -- ++(100pt,0);
\end{tikzpicture}
\end{document}
The result is here:

I conclude that \pgfdeclaredecoration uses stroke parameters only at the very end of drawing decoration. How can I get those parameters and put them in front of pgfpathqstroke? BTW, I had to use pgfpathqstroke, because \pgfdeclaredecoration does pass arrow parameter right in the beginning (doh!).

\pgfsetlinewidth{\pgflinewidth} \pgfsetdash{}{0pt}to the first state. Adding color to the line will be trickier. – Mark Wibrow Nov 14 '14 at 17:28\pgfsetdash{{10pt}{10pt}}{10pt}turns on something that is not easily turned off. – Pygmalion Nov 14 '14 at 20:02\pgfsetlinewidth, i.e. command that returns current linewidth? – Pygmalion Nov 17 '14 at 13:05