The berry::Job implementation uses an internal class as base (berry::InternalJob). The
void AddJobChangeListener(IJobChangeListener* listener);
method, declared in berry::Job, is actually implemented in berry::InternalJob. The proxy implementation in berry::Job is missing so that it is impossible to add IJobChangeListener in to a job, because berry::InternalJob is private.
All of that is located in the org.blueberry.core.jobs plugin.