Yes Witold, I'm sure that the compile() function is processed before compiling the whole element content, so you can modify the content, and even add directives to inner elements, that new content will be compiled, and the added directives will be executed. I just checked it again, it works.
But if we add new directives to the current element itself (and not an inner element), these added directives will not be executed. The compiler retrieves all the directives of an element, sort them by priority, then executes the compile() function of each of those directives. After that, it will compiles the content of the element, which may have been modified by some of those directives, but it won't see any added directive on the element itself.
So Lee, in your initial question, I didn't understand that you would add a ng-class directive on the current element itself. It's just the case that can't work. You can add a class attribute on the current element or any inner element, or a ng-class directive on any inner element, but not a ng-class directive on the current element.