Ich habe mal Dein Beispiel genommen, alles rausgeworfen, was nicht funktioniert und dafür ein paar neue Befehle definiert, mit denen man die Abfolge der Akkorde festlegen bzw. einfach den nächsten Akkord in der Abfolge setzen lassen kann:
\documentclass{article}
\usepackage[showframe]{geometry}
\renewcommand\c[1]{
\makebox[0pt]{\begin{tabular}[b]{l@{}@{}}#1\\\mbox{}\end{tabular}}}
\newenvironment{song}[1]
{\section{#1}\raggedright\activatenextchord}
{}
\renewenvironment{verse}
{\flushleft[Chorus]\newline}
{\endflushleft}
\makeatletter
\newcommand*{\defchords}[2][verse]{%
\@namedef{chords@#1}{#2}%
}
\newcommand*{\active@chords}{}
\newcommand*{\usechords}[1][verse]{%
\edef\active@chords{\@nameuse{chords@#1}}%
}
\newcommand*{\nextchord}{%
\def\reserved@a##1##2\@nil{%
\if\relax\detokenize{##1}\relax
\c{??}%
\else
\c{##1}%
\fi
\def\active@chords{##2}%
\show\active@chords
}%
\expandafter\reserved@a\active@chords\@nil
}
{%
\newcommand*{\activatenextchord}{}% sozusagen den Befehl reservieren
{% bevor er nachfolgend wirklich definiert wird.
\catcode`\^\active
\gdef\activatenextchord{\catcode`\^\active
\let^\nextchord%
}
}
\makeatother
\begin{document}
\tableofcontents
\begin{song}{Coldplay - Viva La Vida}
\defchords{{(Em)}{C}{D}{G}{Em}{C}{D}{G}{Em}}
\usechords
\begin{verse}
^I used to ^rule the ^world\\
Seas would ^rise when I gave the ^word\\
Now in the morning I ^sleep al^one\\
Sweep the ^streets I used to ^own
\end{verse}
\begin{verse}
^I used to ^roll the ^dice\\
Feel the ^fear in my enemy's ^eyes\\
Listen as the ^crowd would ^sing:\\
"Now the ^old king is dead! ^Long live the king!"
\end{verse}
\begin{verse}
^One minute I ^held the ^key\\
Next the ^walls were ^closed on me\\
And I discovered that my ^castles ^stand\\
Upon ^pillars of salt and ^pillars of sand
\end{verse}
\end{song}
\end{document}
Über das optionale Argument von `\defchords` und `\usechords` kann man auch mehrere unterschiedliche Akkordfolgen definieren und diese zu den aktuell aktiven Akkorden machen.
`^` ist innerhalb von `song` (und nur da) wunschgemäß als eine Art Abkürzung von `\nextchord` definiert.
Um auf die Akkorde ganz zu verzichten, müsste man theoretisch einfach `\renewcommand*\nextchord{}` einfügen. Ausprobiert habe ich das aber nicht.