yes, this is by design. When you create RuntimeEnvironment instance you can give it an implementation of RegisterableItemsFactory that is responsible for delivering listeners, handler, etc whenever ksession is created which essentially frees you up from doing any manual registration. So either extend existing ones or provide your own implementation that will provide all the listeners you need.
Usually good practice is to extend the default one (DefaultRegisterableItemsFactory) as it already registers some listeners that are quite important.
Alternatively if you use kjars and jbpm 6.1 or above then you can use deployment descriptors. See docs for more details about both approaches.