You can definitely have a lazy constraint callback in docplex. Benders decompostiion usually uses exactly this callback to generate the Benders cuts.
Correct, docplex has some limitations. Whether they are a problem for you depends on what you actually plan to do. On the other hand, modeling with docplex is a little easier since it is object oriented rather than matrix oriented.
Note that there also is a CPLEX Python API and docplex builds on this API. The CPLEX Python API is a lightweight wrapper around the C callalable library, which in turn is the most low-level interface to CPLEX. So with the CPLEX Python API you can do almost anything that is possible with the callable library, thus almost anything that is possible with CPLEX. So if you don't mind stating your model using a matrix-based API (where variables and constraints are indices rather than objects) then using this Python API gives you the biggest flexibility. If you prefer object oriented modeling (which is more similar to OPL) then docplex is for you.
You may want to look at https://www.ibm.com/support/knowledgecenter/SSSA5P_12.8.0/ilog.odms.cplex.help/CPLEX/Python/topics/cplex_python_overview.html to learn more about the differences between docplex and the CPLEX Python API.
#CPLEXOptimizers#DecisionOptimization