Reference name of description list item in LaTeX

To expand a bit on some of the other answers: here is a modification that does not change the syntax of the description environment:

\documentclass{article}
\usepackage{hyperref}
\usepackage{nameref}

\makeatletter
\let\orgdescriptionlabel\descriptionlabel
\renewcommand*{\descriptionlabel}[1]{%
  \let\orglabel\label
  \let\label\@gobble
  \phantomsection
  \edef\@currentlabel{#1}%
  %\edef\@currentlabelname{#1}%
  \let\label\orglabel
  \orgdescriptionlabel{#1}%
}
\makeatother

\begin{document}

\section{Definitions}
\begin{description}
    \item [Vehicle\label{itm:vehicle}] Something
    \item [Bus\label{itm:bus}] A type of \ref{itm:vehicle}
    \item [Car\label{itm:car}] A type of \ref{itm:vehicle} smaller than a \ref{itm:bus}
\end{description} 

The item `\ref{itm:bus}' is listed on page~\pageref{itm:bus} in section~\nameref{itm:bus}.

\end{document}

Here's a version that seems to work. There are, I think, two separate issues with what you are trying to do. One is simply to get the labels to be what you want and not according to some automatic numbering scheme. That's what the SO hack does. The other issue is to ensure that these labels refer to what you think that they are referring to. The SO hack does not address this. The point is that a label is both a label and a marker. In normal TeX, this dual role isn't visible because the marker isn't really used (well, it's used to figure out what the label should contain, but you want to override that). But when using a hyperlink package, such as hyperref.sty, the marker means something again: it's where the hyperlink goes to.

So you need to both change the label and have the marker at the right point. The former is solved by the SO hack, but the latter (as I said) is not. Either you can add the markers in explicitly, or you can subvert something that would put them in automatically. The reason they aren't there is that you are using the description environment which doesn't automatically put in the markers. By using a different listing environment, say enumerate, which does get the markers put in, we can get the desired behaviour. It's still a "hack", I'm afraid, but not a very big one.

The following does it, as far as my testing shows:

\documentclass{article}
\usepackage{hyperref}

\makeatletter
\newcommand{\labitem}[2]{%
\def\@itemlabel{\textbf{#1}}
\item
\def\@currentlabel{#1}\label{#2}}
\makeatother

\begin{document}
\begin{enumerate}
\labitem{Vehicle}{itm:vehicle} Something
\labitem{Bus}{itm:bus} A type of \ref{itm:vehicle}
\labitem{Car}{itm:car} A type of \ref{itm:vehicle} smaller than a \ref{itm:bus}
\end{enumerate}

Let's refer to \ref{itm:vehicle} \ref{itm:bus} and \ref{itm:car}

\end{document}

Following up on the second suggesiton, assuming you're using hyperref, you could change the definition to:

\makeatletter
\def\namedlabel#1#2{\begingroup
   \def\@currentlabel{#2}%
   \phantomsection\label{#1}\endgroup
}
\makeatother

The phantomsection should anchor backreference links to the item.

There might be a way to do this using the enumitem package too, but I'd have to look further into it.