When paying via credit, the transaction already exists. If the credit does not cover the full amount, then the client will receive the messages you've described--that the credit was applied, but it did not cover the full amount, so additional payment is required.
The client cannot pay because there are no methods to pay with--no CC, ACH, or non-merchant gateways. Applying an existing credit to specific invoices is a bit different, but I do agree they should still be able to apply a credit when no payment methods exist. See CORE-2105. This is likely a very uncommon issue to experience.
Whether that information is set in the template when payment types are disabled bears no consequence. There is some javascript that checks that information even when it's hidden, so it's probably best to leave it as-is.