tabu's tables need to measure the contents of a table before typesetting it. During this process the acronym already gets used. If this happens to be the first time for the acronym then this never gets printed because from the view of the typesetting phase the acronym already has been used (namely in the measuring phase).
However, tabu offers the command \tabuDisableCommands{<code>} to add <code> for the measuring phase exactly for such cases. In our case we need to redefine \@ac (the internal version of \ac) temporarily in a way that it resets the acronym if it is used for the first time during the measuring phase:
\makeatletter
\tabuDisableCommands{
\renewcommand{\@ac}[1]{%
\ifAC@dua
\ifAC@starred\acl*{#1}\else\acl{#1}\fi
\else
\expandafter\ifx\csname AC@#1\endcsname\AC@used
\ifAC@starred\acs*{#1}\else\acs{#1}\fi
\else
\ifAC@starred\acf*{#1}\else\acf{#1}\fi
\AC@reset{#1}% <<< this is added to the original definition
\fi
\fi
}
}
\makeatother
Complete example:
\documentclass[]{article}
\usepackage{booktabs}
\usepackage{tabu}
\usepackage{longtable}
\usepackage[]{acronym}
\acrodef{EIA}[EIA]{United States Energy Information Administration}
\makeatletter
\tabuDisableCommands{
\renewcommand{\@ac}[1]{%
\ifAC@dua
\ifAC@starred\acl*{#1}\else\acl{#1}\fi
\else
\expandafter\ifx\csname AC@#1\endcsname\AC@used
\ifAC@starred\acs*{#1}\else\acs{#1}\fi
\else
\ifAC@starred\acf*{#1}\else\acf{#1}\fi
\AC@reset{#1}% <<< this is added to the original definition
\fi
\fi
}
}
\makeatother
\begin{document}
\begin{longtabu} to 0.9\linewidth{lX}
\toprule
\textbf{Some header} & \\
\midrule
\endfirsthead\\
\toprule
\textbf{Some header} \\
\midrule
\endhead
\bottomrule\\
\endfoot
\bottomrule
\endlastfoot
\ac{EIA} \\
\ac{EIA} \\
\end{longtabu}
\acresetall
\begin{table}[htbp]
\begin{tabu} to 0.9\linewidth{lX}
\toprule
\ac{EIA} \\
\ac{EIA} \\
\bottomrule
\end{tabu}
\end{table}
\end{document}

tabudoes two (or more) passes over the material, so the first pass marks the acronym as used. – egreg Feb 03 '16 at 18:32