I think of "Counterfactual Instantiation" as predictive deployment: You know exactly what code will be deployed using keyless signatures to a predetermined contract address. The transaction is crafted ahead of time, is only deployed if needed, and can't be altered or tampered with.
The reasoning for the added complexity on the Dharma side is the user only needs to transfer tokens, not call any functions. This means any wallet that supports the transfer of ERC20 tokens can facilitate the repayment instead of a custom dApp.