The \label-\ref mechanism is the way to go for this kind of applications; in this case some tweaking is necessary for ensuring that we get a plain number.
I'll present two possibilities. In both I use \numberstringnum from fmtcount to produce the number in words, which is better style.
Recommended form
We use a refenumerate environment that has a label (an arbitrary string) as argument, to be used as argument of \getenumcount, which produces the number.
\documentclass{article}
\usepackage{xparse,fmtcount,refcount}
\makeatletter
\NewDocumentEnvironment{refenumerate}{m}
{\begin{enumerate}}
{\edef\@currentlabel{\arabic{\@enumctr}}\label{#1}\end{enumerate}}
\makeatother
\newcommand{\getenumcount}[1]{\numberstringnum{\getrefnumber{#1}}}
\begin{document}
\section*{Recommended form}
We have \getenumcount{profile} columns, describing the user:
\begin{refenumerate}{profile}
\item ID --- users.name
\item Forename --- users\_profiles.first\_name
\item Surname --- users\_profiles.last\_name
\item Email --- users.mail
\item Primary Service --- services.name
\item Start date --- FROM\_UNIXTIME(users.created)
\item Employment Status --- users\_profiles.employment\_status
\end{refenumerate}
Pros
The refenumerate environment can be used at any nesting level
Cons
It requires two runs of LaTeX. This is actually not a big deal, because it's quite rare that one run suffice (think to the table of contents, or any cross reference).

Not recommended form
We use a getreference environment that encloses all code from the start of the paragraph with the reference up to the enumerate environment we want to count the items of.
\documentclass{article}
\usepackage{fmtcount,environ}
\makeatletter
\NewEnviron{getreference}
{\let\latex@label\label\let\label\@gobble\global\let\printnumber\relax
\setbox0=\vbox{\@tempswafalse\if@nobreak\@tempswatrue\fi
\BODY\xdef\printnumber{\noexpand\numberstringnum{\number\value{enumi}}}
\if@tempswa\aftergroup\@afterheading\fi
}%
\let\label\latex@label
\BODY}
\makeatother
\begin{document}
\section*{Not recommended form}
\begin{getreference}
We have \printnumber{} columns, describing the user:
\begin{enumerate}
\item ID --- users.name
\item Forename --- users\_profiles.first\_name
\item Surname --- users\_profiles.last\_name
\item Email --- users.mail
\item Primary Service --- services.name
\item Start date --- FROM\_UNIXTIME(users.created)
\item Employment Status --- users\_profiles.employment\_status
\end{enumerate}
\end{getreference}
\end{document}
Pros
One LaTeX run is required.
Cons
Only one level can be counted, precisely the outermost enumerate environment.
