I'm not sure whether you can do this with pgfplots, but Asymptote excels at this sort of thing.
For example, here is a MWE, in the form of a Beamer slide, that includes an interactive figure I created for a lecture on multiple regression. If you open this is Acrobat Reader you can click on the plot and then rotate, zoom, etc.
Since I like to keep my LaTeX and figure code separate I split this into two files, asyslide.tex and multiregr.asy.
asyslide.tex
\documentclass{beamer}
\usepackage[inline]{asymptote}
\begin{document}
\begin{frame}
\frametitle{Geometry of Multiple Regression}
\begin{center}
\asyinclude[height=2.5in,inline=true]{multiregr.asy}
\end{center}
\end{frame}
\end{document}
multiregr.asy
settings.render=10;
settings.prc=true;
settings.outformat="pdf";
import three;
size(200);
defaultpen(fontsize(9));
currentprojection=perspective(4,2,1.5);
/* draw the X,Y-plane */
path3 xplane = (0,0,0)--(2,0,0)--(2,2,0)--(0,2,0)--cycle;
draw(xplane,gray);
/* X vectors */
path3 x1 = (0,0,0)--(1.75,1,0);
draw(Label("$\mathbf{x}_1$", 1),x1,Arrow3);
path3 x2 = (0,0,0)--(0.5,1.9,0);
draw(Label("$\mathbf{x}_2$", 1, align=S),x2,Arrow3);
path3 y= (0,0,0)--(1.8, 1.5,1.2);
draw(Label("$\mathbf{y}$", 0.75, align=2*W),y,Arrow3);
/* Project Y into subspace of Xs */
path3 projy = planeproject(xplane)*y;
triple endpoint = invert(point(length(projy)));
draw(Label("$\mathbf{\widehat{y}}$", 1, align=E),projy,red,Arrow3);
draw(Label("$\mathbf{e}$", 0.75,align=RightSide),(1.8,1.5,0)--(1.8,1.5,1.2),red+dashed,Arrow3);
You can compile this example as:
pdflatex asyslide.tex
asy asyslide*.asy
pdflatex asyslide.tex
This generates the following output:

asy asyslide*.asystep. I get informed that the runtime does not support onscreen rendering, that I should install the glut library (I have freeglut), run ./configure, and recompile. Including switching frompgfplotsto Asymptote that seems like a big step unfortunately. – Habi Oct 10 '13 at 07:40