Here's an option you can try that uses the smartref package. We start off by called \addtoreflist{chapter} which defines the macro
\sgetchapterval{<macro>}{<lab>}
which stores the value of the chapter counter associated with label <lab> in <macro>. Then, using some \ifthenelse statements (provided by xifthen), we condition on whether the chapter reference is for the previous or the next chapter. If otherwise, we default to a varioref reference using \vref.

\documentclass{book}
\usepackage{smartref}% http://ctan.org/pkg/smartref
\usepackage{varioref}% http://ctan.org/pkg/varioref
\usepackage{xifthen}% http://ctan.org/pkg/xifthen
\addtoreflist{chapter}% Provides chapter counter extraction
\newcounter{mychap}% Additional chapter counter
\newcommand{\chapref}[1]{%
\sgetchapterval{\themychap}{#1}% Save chapter counter from reference in \themychap
\setcounter{mychap}{\value{chapter}}%
\addtocounter{mychap}{1}% Next chapter
\ifthenelse{\equal{\mychap}{\themychap}}%
{the next chapter}%
{\addtocounter{mychap}{-2}% Previous chapter
\ifthenelse{\equal{\mychap}{\themychap}}%
{the previous chapter}%
{Chapter~\vref{#1}}%
}%
}%
\begin{document}
\chapter{First chapter} \label{chap:first}
See Chapter~\vref{chap:second} and Chapter~\vref{chap:last}. See \chapref{chap:second} or \chapref{chap:last}.
\chapter{Second chapter} \label{chap:second}
\chapter{Last chapter} \label{chap:last}
See Chapter~\vref{chap:second} and Chapter~\vref{chap:first}. See \chapref{chap:second} or \chapref{chap:first}.
\end{document}
I'm sure you could fine-tune this to your liking.