I think I have a solution for you. It works by measuring the widths of the columns in a pgf matrix and saving them to the .aux file. Then on a subsequent run (or later that run for subsequent matrices), it inserts an extra row at the start which consists of paths of the correct widths. There's a bit of trickery there to ensure that this extra row doesn't actually do anything, though I don't guarantee that that works - I tested it with setting row styles and with setting row separation. But my tests were not extensive.
Here's the code:
\documentclass{article}
%\url{http://tex.stackexchange.com/q/57871/86}
\thispagestyle{empty}
\usepackage{tikz}
\makeatletter
\pgfkeys{/tikz/save cell widths code/.code={
\edef\lc@widths{\noexpand\noexpand\noexpand\expandafter\gdef\noexpand\noexpand\noexpand\csname lc@widths@#1@cols\noexpand\noexpand\noexpand\endcsname{\the\pgf@matrix@numberofcolumns}}
\bgroup
\foreach \lc@k in {1,...,\pgf@matrix@numberofcolumns} {
\edef\lc@temp{\noexpand\noexpand\noexpand\expandafter\gdef\noexpand\noexpand\noexpand\csname lc@widths@#1@maxx\lc@k\noexpand\noexpand\noexpand\endcsname{\csname pgf@matrix@maxx\lc@k\endcsname}\noexpand\noexpand\noexpand\expandafter\gdef\noexpand\noexpand\noexpand\csname lc@widths@#1@minx\lc@k\noexpand\noexpand\noexpand\endcsname{\csname pgf@matrix@minx\lc@k\endcsname}}
\expandafter\expandafter\expandafter\gdef\expandafter\expandafter\expandafter\lc@widths\expandafter\expandafter\expandafter{\expandafter\lc@widths\lc@temp}
}
\immediate\write\pgfutil@auxout{\lc@widths}
\edef\lc@temp{\lc@widths}
\lc@temp
\egroup
}
}
\tikzset{save cell widths/.style={%
hack end matrix=#1,
append after command={[save cell widths code=#1]},%
},
hack end matrix/.code={%
\let\lc@matrix=\pgf@matrix@cont
\def\pgf@matrix@cont{\lc@matrix\lc@use{#1}}%
}
}
\def\lc@use#1{%
\@ifundefined{lc@widths@#1@cols}{}{%
\def\lc@line{}%
\expandafter\let\expandafter\lc@cols\csname lc@widths@#1@cols\endcsname
\xdef\lc@line{\noexpand\path (\csname lc@widths@#1@minx1\endcsname,0pt) (\csname lc@widths@#1@maxx1\endcsname,0pt);}
\foreach \lc@k in {2,...,\lc@cols} {
\expandafter\gdef\expandafter\lc@line\expandafter{\lc@line\pgfmatrixnextcell}
\edef\lc@temp{\noexpand\path (\csname lc@widths@#1@minx\lc@k\endcsname,0pt) (\csname lc@widths@#1@maxx\lc@k\endcsname,0pt);}
\expandafter\expandafter\expandafter\gdef\expandafter\expandafter\expandafter\lc@line\expandafter\expandafter\expandafter{\expandafter\lc@line\lc@temp}
}
\pgfmathparse{-\pgfmatrixrowsep}
\edef\lc@temp{\noexpand\pgfmatrixendrow[\pgfmathresult pt]}
\expandafter\expandafter\expandafter\gdef\expandafter\expandafter\expandafter\lc@line\expandafter\expandafter\expandafter{\expandafter\lc@line\lc@temp}
\lc@line
\advance\pgfmatrixcurrentrow by -1\relax
}
}
\makeatother
\begin{document}
Currently I have two matrices, this:
\begin{tikzpicture}
\matrix[save cell widths=m]{
\node{first matrix with long and}; & \node{short column}; \\
\node{second}; & \node{row}; \\
};
\end{tikzpicture}
and this:
\begin{tikzpicture}
\matrix[save cell widths=m]{
\node{second matrix}; & \node{with another column long}; \\
};
\end{tikzpicture}
I want that is that both matrices look as if they were cut out of this combined matrix:
\begin{tikzpicture}
\matrix[save cell widths=m]{
\node{first matrix with long and}; & \node{short column}; \\
\node{second}; & \node{row}; \\
\node{second matrix}; & \node{with another column long}; \\
};
\end{tikzpicture}
\begin{tikzpicture}
\matrix[nodes={anchor=base},draw,save cell widths=mm,row 2/.style={every node/.style={anchor=base,green}},row sep=1cm] (m) at (0,0) {
\node {a}; & \node {b}; & \node {cde}; \\
\node {a}; & \node {b}; & \node{c}; \\
};
\matrix[nodes={anchor=base},draw,save cell widths=mm] (ma) at (0,-3) {
\node {abc}; & \node {b}; & \node{c}; \\
\node {a}; & \node {b}; & \node{c}; \\
};
\end{tikzpicture}
\begin{tikzpicture}
\matrix[draw,save cell widths=mmm,row sep=1cm] (m) at (0,0) { \node[right] {abcdefgh}; & \node{x}; \\ };
\matrix[draw,save cell widths=mmm] (ma) at (0,-3) { \node[left] {abc}; & \node{x}; \\ };
\end{tikzpicture}
\end{document}
Here's the result:

Edit 2012-06-01 Following on from the comments, instead of centring the added stuff, it now uses the maxx and minx directly thus allowing for cell contents to be shifted relative to the origin (see last example in code).
\newcommand{\WidestLeftColumnText}{}%, and\newcommand{\WidestRightColumnText}{}%should be doable, but not sure if that would be of interest to you. – Peter Grill May 31 '12 at 18:34