Du könntest den Inhalt des Labels in eine `\parbox` setzen:
\documentclass{article}
\usepackage{chemfig}
\begin{document}
\schemestart
A \arrow{->[\parbox{5cm}{\centering a\\b}][c]} B
\schemestop
\end{document}
![Beispiel eins][1]
oder zur Bequemlichkeit einen Befehl definieren, der das für Dich macht:
\documentclass{article}
\usepackage{chemfig}
\newcommand\stack[2][5cm]{\parbox{#1}{\centering#2}}
\begin{document}
\schemestart
A \arrow{->[\stack{a\\b}][c]} B
\schemestop
\end{document}
----------
Eine zweite Möglichkeit ohne Argument für die Breite wäre, eine `{tabular}` Umgebung zu verwenden (Dank an [@saputello][2] für den Hinweis):
\documentclass{article}
\usepackage{chemfig}
\newcommand\stack[1]{\begin{tabular}{@{}c@{}}#1\end{tabular}}
\begin{document}
\schemestart
A \arrow{->[\stack{a\\b}][c]} B
\schemestop
\end{document}
----------
Die Label sind TikZ-Knoten. Wenn man es also schaffte, ihnen die Option `align=center` hinzuzufügen, dann bräuchte man die `\parbox` oder die `{tabular}`-Umgebung nicht. Leider stellt `chemfig` keine Schnittstelle bereit, um ihre Eigenschaften direkt zu ändern. Die Knoten werden durch den Befehl `\CF@arrow@display@label@i` `\CF@arrow@display@label@a` gesetzt, den man umdefinieren könnte:
\documentclass{article}
\usepackage{chemfig}
\makeatletter
\def\CF@arrow@display@label@i#1#2#3{%
\ifx\@empty#1\@empty\else
\if*\expandafter\@car\detokenize{#1}\@nil
\ifCF@reac@debug
node[pos=#2,sloped,yshift=#3\CF@arrow@labelsep,draw,fill,cyan](shifted@node){}%
node[
draw,rotate=\CF@rotate@node#1\@nil,anchor=\CF@anchor@node#1\@nil#3,at=(shifted@node),
align=center% <= das ist neu
]{\expandafter\@gobble\@gobble#1}%
\else
node[pos=#2,sloped,yshift=#3\CF@arrow@labelsep](shifted@node){}%
node[
rotate=\CF@rotate@node#1\@nil,anchor=\CF@anchor@node#1\@nil#3,at=(shifted@node),
align=center% <= this is new
]{\expandafter\@gobble\@gobble#1}%
\fi
\else
\ifCF@reac@debug
node[pos=#2,sloped,yshift=#3\CF@arrow@labelsep,draw,fill,cyan](shifted@node){}%
node[
draw,pos=#2,anchor=-#390,sloped,yshift=#3\CF@arrow@labelsep,
align=center% <= das ist neu
]{#1}%
\else
node[
pos=#2,anchor=-#390,sloped,yshift=#3\CF@arrow@labelsep,
align=center% <= das ist neu
]{#1}%
\fi
\fi
\fi
}
\makeatother
\begin{document}
\schemestart
A \arrow{->[a\\b][c]} B
\schemestop
\end{document}
könnte. Anstelle der manuellen Neu-Deufinition wäre ist aber ein Patch mit der Hilfe von [Enrico Gregorios][3]'s [`regexpatch`][4] `regexpatch` Paket leichter:
\documentclass{article}
\usepackage{chemfig}
\usepackage{regexpatch}
\makeatletter
% \xpatchcmd{<cmd>}{<search>}{<replace>}{<success>}{<failure>}
% die Sternvariante ersetzt alle Vorkommnisse von <search>
\xpatchcmd*\CF@arrow@display@label@i{node[}{node[align=center,}{}{}
\xpatchcmd*\CF@arrow@display@label@a{node[}{node[align=center,}{}{}
\makeatother
\begin{document}
\schemestart
A \arrow{->[a\\b][c]} B
\schemestop
\end{document}
[1]: http://i.stack.imgur.com/NIiSc.png
[2]: http://texwelt.de/wissen/benutzer/16
[3]: http://tex.stackexchange.com/users/4427/egreg
[4]: http://www.ctan.org/pkg/regexpatch