nLockTime is specific to the subject transaction. This means if you sign a transaction with an nLockTime, that transaction cannot confirm in a block prior to that constraint.
OP_CHECKLOCKTIMEVERIFY on the other hand, restrict outputs of a transaction from being spent prior to a certain constraint. There are very different use cases for OP_CHECKLOCKTIMEVERIFY than for nLockTime. If a customer is withdrawing funds from a service, there is no real reason why the service would want to restrict the customer from spending their withdrawal anything other than immediately.
As mentioned above, OP_CHECKLOCKTIMEVERIFY will be used with LN and other similar payment channels. It is likely that OP_CHECKLOCKTIMEVERIFY was soft-forked into Bitcoin with LN/payments channels in mind.