If you look through the engine code (e.g. Actor.h), you will notice that every event dispatcher (aka BlueprintAssignable UPROPERTY) is defined using DECLARE_DYNAMIC_MULTICAST_DELEGATE. When regular delegates are tagged as uproperty, compilation fails with a quite inappropriate error (delegate class not found). The same thing happens with DECLARE_EVENT and related definitions. But why there are no dynamic events? They are multicast delegates, too.
I find this bizarre as well, because the non-dynamic delegates have a BindUFunction() method as well, while that’s the only method available for dynamic delegates, which makes it hard to deal with them when you’re mixing them with non-dynamic delegates since it’s not possible to bind a non-dynamic delegate to a dynamic delegate (the other way is possible using BindUFunction() ).