Both Drools and Esper can dynamically inject rules and do not require a restart of Storm or the JVM.
Both Esper and Drools Fusion can handle complex events, generally, with different tradeoffs.
In the same distributed stream processing solution domain are Spark streaming, Storm, Yahoo S4 and Apache Samza. Any of these can be used to host Esper/Drools. For Storm I think since it replays tuples you'd want to either de-duplicate before sending to Drools/Esper or design your continuous queries expecting possible duplicate deliveries.