Approach to avoid memory allocation with struct with abstract type fields

This might be one of the (rare) cases, where a traditional OOP language with vtable based single dispatch is is better suited then julia. If you need only a single method of LJPair... in your hot loop, you can store it in the dict instead using FunctionalWrappers.jl. This is essentially the store pointers to methods approach you sketched in your question.
See also Helping julia with runtime dispatch/arrowtypes.