Name scoping issue (probably)

This happens because each entry in a tabular is typeset in its own group, and \FPadd does a local assignment. You can globalize it as follows:

\def\item#1{%
 \FPadd\0\total{#1}\global\let\total\0
 $\FPprint{#1}$\\\\
}

\documentclass{article}
\usepackage[autolanguage]{numprint}
\usepackage{fp}

\FPset\total{0}
%
\def\Item#1{%
 \FPadd\total\total{#1}
 \xdef\total{\total}
 $\FPprint{#1}$\\\\
}
%
\def\itotal{$\FPprint\total$}

\begin{document}
\begin{tabular}{l}
  \Item{17.5}
  \Item{12}
  \itotal
\end{tabular}

\end{document}