In the C Callable library, you can use functions CPXaddrows (CPXcutcallbackadd if you are adding a cut from within a callback function) to add a row to the LP model.
After adding a violated cut, the previous solution becomes infeasible. *As far as possible*, (subject to other constraints) CPLEX will try to use a previous existing basis. Usage of dual simplex optimizer will ensure that you do not restart from scratch after adding a new violated cut.
This is similar to the case where you add a new column/variable. If you use the primal simplex algorithm, the current solution continues to remain feasible, although not provably optimal yet. So, primal simplex algorithm can start from the pre-existing basis.
To verify indeed that CPLEX is doing what you expect it to do (not restarting optimization from scratch) use function getNIterations after a call to the optimizer to find out how many iterations CPLEX took to reoptimize the basis. If CPLEX reoptimized the problem from start, you should see a relatively high number here.
------------------------------
CPLEX User
------------------------------