Acho que há vários recursos que precisam ser carregados do seu aplicativo, portanto, example.com/catsapp deve procurar um subdiretório. Sem uma barra final, os navegadores veem example.com/catsapp como um recurso semelhante a um arquivo, não como um recurso semelhante a uma pasta. A seguir, o link viewer.html relativo a example.com/catsapp leva a example.com/viewer.html . No entanto, resolver viewer.html em relação a example.com/catsapp/ (observe a barra final) resolve para example.com/catsapp/viewer.html .
Sugiro redirecionar example.com/catsapp para example.com/catsapp/ (não internamente, mas via HTTP 3xx) e editar sua regra ProxyPass para incluir também a barra final. Por exemplo:
Redirect permanent /catsapp /catsapp/
ProxyPass /catsapp/ http://catsapp-server/ timeout=600
ProxyPassReverse /catsapp/ http://catsapp-server/ timeout=600