As of ddcutil 2.2.0, libddcutil no longer supports watching for DPMS changes. This change is documented in Shared Library Changes for Release 2.2.0. DDCA_EVENT_CLASS_ALL is equivalent to DDCA_EVENT_CLASS_DISPLAY_DETECTION. If DDCA_EVENT_CLASS DPMS (as opposed to DDCA_EVENT_CLASS_ALL or DDCA_EVENT_CLASS_DISPLAY_DETECTION) is specified to ddca_start_watch_displays(), the function returns DDCRC_ARG. Detailed information about the failure can be obtained using ddca_get_error_detail(). Messages are also written to the system log.
Value DDCA_EVENT_CLASS_DPMS continues to exist in enum DDCA_Display_Event_Class to avoid breaking backward compatibility in the ABI.
While this information exists in the release notes, it needs to be better documented in ddcutil_c_api.h and ddcutil_types.h.
Regarding the underlying problem you're trying to address, are you saying that without the "X11" connection provided by kwin, libddcutil and powerdevil do not crash when kwin fails? I agree with David that powerdevil should restart in this situation.