The main reason both exist is because different clients have different needs. For example, clients that run inside the container need certain things and clients that run outside the container need others.
One main reason that plain JMS connection factories are available is for remote clients. A remote client can look-up a plain JMS connection factory and use it to connect to the server. This is not true of JCA based JMS connection factories. They are only usable from within the container.
Local clients (i.e. those running within the container) often operate in the context of a JTA transaction so they need a JCA based JMS connection factory so the JMS work is automatically enlisted in the ongoing JTA transaction. In this way multiple operations involving multiple resources can be combined into a single transaction with atomic commit and rollback across all resources. This functionality is facilitated by the EJB, JTA, JMS, and JCA specifications.
There are other reasons, but that's the basic stuff.
Thanks for the detailed reply Justin! Much appreciated!