As far as I know, there are no constraints on what you can do in a callback other than tampering with the CPLEX problem instance. So you should be able to call an NLP solver (on a separate problem) inside a lazy constraint callback. That said, if the NLP solver takes a long time solving the subproblem, you may not be thrilled with the rate of progress (and you will need to adjust the CPLEX time limit accordingly).
For the second question, that is going to depend on what sort of NLP you are solving, whether your callback requires an optimal solution to the NLP or just a "good solution", and possibly what language you are programming in.
#CPLEXOptimizers#DecisionOptimization