There seems to be no way to effectively guarantee "What goes in goes out (at
least nearly)" except writing a dedicated QQbar.gamma() member function.
OTOH as soon as you return something other than QQbar from such a member
purists will roast you.
CIF doesn't have gamma() either but usage of CIF should be rethought in the light of
sage: ComplexBallField(100)(sqrt(2)).gamma()
[0.8865814287192591250809176124 +/- 2.00e-29]
Really, arb functionality and integration does not leave much to desire, so use it.
As to a possible symbolic result (is there one?) this could be added to the
symbolic gamma().