Seems your code works after commenting out a few things that are not necessary and adding definitions for \@firstofthree and \@secondofthree. (\@thirdoftree is already defined.)
Your code does break the hyperref-package and therefore does only work as long as the hyperref-package is not loaded.
\documentclass{book}
\usepackage{amsthm}
\makeatletter
\renewcommand*\@newl@bel[3]{%
\@ifundefined{#1@#2}%
\relax
{%
\gdef\@multiplelabels{%
\@latex@warning@no@line{There were multiply-defined labels}%
}%
\@latex@warning@no@line{Label `#2' multiply defined}%
}%
\global\@namedef{#1@#2}{#3}%
}%
%\@onlypreamble\@newl@bel
%\let\@multiplelabels\relax
\renewcommand*\label[1]{%
\@bsphack
\protected@write\@auxout
{}%
{\string\newlabel{#1}{{\@currentlabel}{\thepage}{\thechapter}}}%
\@esphack
}%
%\def\refstepcounter#1{%
% \stepcounter{#1}%
% \protected@edef\@currentlabel
% {\csname p@#1\endcsname\csname the#1\endcsname}%
%}%
\renewcommand*\ref[1]{%
\expandafter\@setref\csname r@#1\endcsname\@firstofthree{#1}%
}%
\renewcommand*\pageref[1]{%
\expandafter\@setref\csname r@#1\endcsname\@secondofthree{#1}%
}%
\newcommand*\chapref[1]{%
\expandafter\@setref\csname r@#1\endcsname\@thirdofthree{#1}%
}
\newcommand\@firstofthree[3]{#1}%
\newcommand\@secondofthree[3]{#2}%
%\newcommand\@thirdofthree[3]{#3}%
\makeatother
\theoremstyle{plain}
\newtheorem{theorem}{Theorem}
\begin{document}
\setcounter{page}{3}
\setcounter{chapter}{1}
\chapter{abc}
\begin{theorem}\label{theo}abc\end{theorem}
Theorem \ref{theo} in chapter \chapref{theo}, page \pageref{theo} says that abc.
\end{document}
In case you really don't wish to use the zref-package I can offer another crude hack which seems not to break the hyperref-package:
Redefine/patch the \label-command in order to have the \label-command patch the \@currentlabel-macro in a way leading to \@currentlabel expand to two arguments preceeded by a robust command for selecting one of the two arguments, the first argument holding what \@currentlabel held before being patched, the second argument holding \thechapter:
\documentclass{book}
\usepackage{amsthm}
%%\usepackage{hyperref}
\makeatletter
\DeclareRobustCommand\My@GetRefArg[2]{#1}%
\DeclareRobustCommand\MyOther@GetRefArg[2]{#2}%
\newcommand\My@saved@currentlabel{}%
\AtBeginDocument{%
\let\My@oldlabel=\label
\renewcommand\label[1]{%
\@bsphack
\let\My@saved@currentlabel=\@currentlabel
\expandafter\def
\expandafter\@currentlabel
\expandafter{%
\expandafter\My@GetRefArg
\expandafter{%
\@currentlabel}{\thechapter}}%
\@esphack
\My@oldlabel{#1}%
\@bsphack
\let\@currentlabel=\My@saved@currentlabel
\@esphack
}%
\@ifpackageloaded{hyperref}{%
\DeclareRobustCommand\chaprefAtNoStar[1]{%
\begingroup
\let\My@GetRefArg\MyOther@GetRefArg
\ref{#1}%
\endgroup
}%
\DeclareRobustCommand\chaprefAtStar[1]{%
\begingroup
\let\My@GetRefArg\MyOther@GetRefArg
\ref*{#1}%
\endgroup
}%
\DeclareRobustCommand\chapref{%
\@ifstar\chaprefAtStar\chaprefAtNoStar
}%
}{%
\DeclareRobustCommand\chapref[1]{%
\begingroup
\let\My@GetRefArg\MyOther@GetRefArg
\ref{#1}%
\endgroup
}%
}%
}%
\makeatother
\theoremstyle{plain}
\newtheorem{theorem}{Theorem}
\begin{document}
\setcounter{page}{3}
\setcounter{chapter}{1}
\chapter{abc}
\begin{theorem}\label{theo}abc\end{theorem}
Theorem \ref{theo} in chapter \chapref{theo}, page \pageref{theo} says that abc.
%%
%%Theorem \ref*{theo} in chapter \chapref*{theo}, page \pageref*{theo} says that abc.
\end{document}
In case of using hyperref, hyperlinks with \chapref will not lead to the start of the chapter in question but to the anchor that was placed as the last one before placing the corresponding \label. Thus, with the example above, the hyperlink with \chapref{theo} will go to the start of the theorem in question although displaying the number of the chapter where that theorem occurs.
In case of using hyperref, you have "starred" variants of \ref and \pageref displaying the numbers in question but not producing a hyperlink. Therefore in case of hyperref being loaded there is also a "starred" variant of \chapref.
!!!I have no idea whether any of these crude hacks might break functionality of whatsoever documentclass or package.!!!
!!!Therefore I do not give any warranties. If something breaks, handling the pieces is up to you.!!!
!!!The fear of breaking functionality of whatsoever documentclass or package leads me to highly recommending using the zref-package.!!!
zrefpackage rather than such weird hacks. Welcome to TeX.SE ... by the way – Jan 23 '17 at 13:47refpackages it is 'dangerous' -- as far as I can see your approach will break a possible use ofhyperref– Jan 23 '17 at 13:58? ! Undefined control sequence. \@firstofthree. Didn't you try your own example? – Ulrike Fischer Jan 23 '17 at 14:59\@firstofthree(used in\ref) and\@secondofthree(used in\pageref) are undefined and then really wonder that both reference commands don't work as wanted? – Ulrike Fischer Jan 23 '17 at 15:12*refrelated package. There's no need of screwing up\new@l@bel,\refstepcounteretc. – Jan 23 '17 at 17:19