You can get output like:

with the code:
\documentclass{article}
\usepackage{tabularx}
\usepackage{etoolbox}
\usepackage{booktabs}
\makeatletter
\newcommand\headers[1]{%
\def\sep{}%
\def\realheader{}%
\renewcommand*\do[1]{\protected@xappto\realheader{\sep\textbf{\textit{##1}}}\xdef\sep{&}}
\docsvlist{#1}%
\\\toprule\realheader\\\midrule
}
\makeatother
\begin{document}
\begin{tabularx}{\hsize}{XXX}
\headers{Category one, Category two, Category three}
stuff & stuff & stuff\\
\bottomrule
\end{tabularx}
\end{document}
Rather than using \hline
I have succumbed to my biases and used the booktabs package as I think this gives much better output.
Apart from using booktabs the main change from the OP is that I have changed the syntax to use a command separated list for the header, which is then turned into the table header using \docsvlist
from the etoolbox package. Unfortunately, this seems to require a little bit of expansion trickery using \protected@xappto
to construct the header piece by piece.
EDIT
Here is a fancier version that defines a new table environment mytable
that takes one argument that specifies the column headers as a comma separated list, and where body of the environment contains the (tabularx) environment. Using this the code:
\begin{mytable}{Category one, Category two, Category three}
stuff & stuff & stuff\\
\end{mytable}
produces

which is essentially the same as above except that I have used the OPs formatting. The main advantage of this approach is that you do not have the specify the column headers so that, for example,
\begin{mytable}{Category one, Category two, Category three, Column four}
stuff & stuff & stuff & stuff\\
\end{mytable}
works as expected.
Here is the modified code (see the comments for an explanation of what the code is doing):
\documentclass{article}
\usepackage{tabularx}
\usepackage{etoolbox}
\makeatletter
\newcounter{mytablecolumns}% to automate the number of columns
\newenvironment{mytable}[1]{%
\def\sep{}% will be the table column separator
\setcounter{mytablecolumns}{0}% reset column counter
\def\realheader{}% will become the table header
\renewcommand*\do[1]{% construct each entry in the header
\protected@xappto\realheader{\sep\textbf{\textit{##1}}}% add header
\stepcounter{mytablecolumns}% increment column counter
\xdef\sep{&}% set up next column separator
}
\docsvlist{#1}% create the table header
\xdef\sep{*{\arabic{mytablecolumns}}X}% create the table specifications
\expandafter\tabularx\expandafter\hsize\expandafter{\sep}% start tabularx
\realheader\\\hline\hline% insert header and two \hlines
}{\endtabularx}% end tabularx environment
\makeatother
\begin{document}
\begin{mytable}{Category one, Category two, Category three}
stuff & stuff & stuff\\
\end{mytable}
\end{document}
{}
on the gui. – user30471 Dec 21 '19 at 20:06{}
next time! Thank you! – Extremo Dec 21 '19 at 20:56