If I got it correctly, it uses two levels of enums, a primary (a class pointer) which indicates the implementing class and a secondary which indicates the case within that implementing class.
This looks reasonable to me and will allow you to clearly document the call back by cases.
Adding #define constants may also improve (?)
#define LV_OBJ_CLASS &lv_obj_class
#define OV_CHART_CLASS &lv_chart_class