Would you consider StateRestoreListener customization through StreamsBuilderFactoryBean? So it can be passed via KafkaStreams#setGlobalStateRestoreListener. Extending the factory bean does not work because KafkaStreams has private access.
Maybe a better solution would be providing an interface like KafkaStreamsCustomizer such that;
StateListener, UncaughtExceptionHandler, cleanupOnStart and cleanupOnStop can be configured through.