Moin Christoph,
entschuldige bitte die späte Antwort, ich war mal wieder `im Auftrag des Herrn' (Chef) unterwegs...

Umsetzbar ist Dein Ansinnen schon, allerdings willst Du die Zellen umsortieren, wenn Du in `\befehl1' alles für Soll deklarieren willst und in `befehhl2' alles für Haben, die Ausgabe aber nach wie vor Soll/Haben in einer Zeile haben soll. Dazu könntest Du Dir die Argumente aus befehl1/befehl2 in Macros zwischenspeichern und hinterher entsprechend anders herum ausgeben.
\befehl1 +2 würde ich auch nicht starr auf je 2 Wertepaare + Summe auslegen wollen. Die Summen könntest Du direkt an die bilanz-Umgebung angeben (so entsprechend definiert), \befehl1 + 2 würde ich für je ein Wertepaar auslegen. Zur Demo:
Code:
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{tabularx}
\usepackage{showframe}%<-- nur zur Demo
%
\newlength\foolen
\settowidth\foolen{1.000.000,00}% oder was auch immer
%
\newcounter{haben}
\newcounter{soll}
\newcounter{loop}
\newcommand*\loopmax{0}
\newcommand\haben[2]{%
  \typeout{\protect\haben\space außerhalb bilanz-Umgebung!}%
}%
\newcommand\soll[2]{%
  \typeout{\protect\soll\space außerhalb bilanz-Umgebung!}%
}%

\newcommand*\habensumme{0}
\newcommand*\sollsumme{0}
\makeatletter
\newenvironment{bilanz}[3][\linewidth]{%
  \renewcommand\haben[2]{%
    \stepcounter{haben}%
    \@namedef{haben\the\value{haben}txt}{##1}%
    \@namedef{haben\the\value{haben}val}{##2}%
  }%\haben{text}{wert}
  \renewcommand\soll[2]{%
    \stepcounter{soll}%
    \@namedef{soll\the\value{soll}txt}{##1}%
    \@namedef{soll\the\value{soll}val}{##2}%
  }%\soll{text}{wert}
  \renewcommand*\sollsumme{#2}%
  \renewcommand*\habensumme{#3}%
  \setcounter{haben}{0}%
  \setcounter{soll}{0}%
  \begin{center}% mittig zum Textblock
    \begin{minipage}{#1}% damit sich kein Seitenumbruch zwischen makebox und tabularx verirren kann
}{%
  \ifnum\value{haben}>\value{soll}%
    \edef\loopmax{\the\value{haben}}%
  \else
    \edef\loopmax{\the\value{soll}}%
  \fi
  \setcounter{loop}{0}%
  \noindent% Zeile nicht einziehen
  \makebox[0pt][l]{% Breite = Null, links ausrichten
    \parbox[t]{\linewidth}{% den tatsächlichen Inhalt auf Breite der minipage ziehen
      \centering Konto%
    }%
  }% <-- Zeilenende auskommentieren,
  % die folgende tabularx an der Grundlinie der obersten Zeile ausrichten:
  \begin{minipage}[t]{\linewidth}
    \raggedright
    \begin{tabularx}{\linewidth}[t]{@{}X>{\raggedleft}p{\foolen}|X>{\raggedleft\arraybackslash}p{\foolen}@{}}
      Soll &\multicolumn{2}{c}{}& Haben\\
      \hline
    \end{tabularx}
    \@whilenum \value{loop}<\loopmax \do {%
      \stepcounter{loop}% analog zu \soll/\haben: erst den Zähler erhöhen
      \typeout{+++ H(\thehaben), S(\thesoll), M(\loopmax), L(\theloop)}% nur zur Info
      \begin{tabularx}{\linewidth}{@{}X>{\raggedleft}p{\foolen}|X>{\raggedleft\arraybackslash}p{\foolen}@{}}
        \@nameuse{soll\the\value{loop}txt} & \@nameuse{soll\the\value{loop}val}%
        & \@nameuse{haben\the\value{loop}txt} & \@nameuse{haben\the\value{loop}val}%
      \end{tabularx}
    }
    \begin{tabularx}{\linewidth}{@{}X>{\raggedleft}p{\foolen}|X>{\raggedleft\arraybackslash}p{\foolen}@{}}
      \cline{2-2}\cline{4-4}&&&\\[-2ex]
      Summe & \sollsumme & Summe & \habensumme
    \end{tabularx}
   \end{minipage}
  \end{minipage}
  \end{center}
}
\makeatother
%% Dokument ====================
\begin{document}
  \begin{bilanz}{1.000.000,00}{1.000.000,00}
        \soll{Maschinen}{500.000,00}
        \haben{Eigenkapital}{1,00}
        \soll{Forderungen aus Lieferungen}{499.999,01}
        \haben{Fremdkapital}{999.999,00}
        \soll{Lohnkosten}{0,99}
  \end{bilanz}
\end{document}
wobei, die tabularx-Umgebung musste ich hier zerstückeln, weil die hier verwendete \@whilenum-Anweisung nicht direkt aus einer Tabellenzelle aufgerufen werden kann, um weitere Tabellenzellen zu generieren (beim & würde besagte Zelle (und damit eine (La)TeX-Gruppe) beendet, wodurch der \@whilenum (so innerhalb einer T-Zelle aufgerufen) sein eigenes Ende nicht mehr mitbekommt...
Und ja, die Ausgabe hab ich noch nicht optimiert

Ob Du da eine Doktorarbeit draus machen willst, überlass ich Dir

Gruß