The VST3 wrapper copies the midi events from EventList to a MidiBuffer instance and discards the note ID. If you want to look at the code it’s in JUCE/modules/juce_audio_plugin_client/VST3/ juce_VST3_Wrapper.cpp. The code for converting the EventList to MidiBuffer is in modules/juce_audio_processors/format_types/ juce_VST3Common.h
You could hack that code to store a pointer to the event list and pass it to the plugin instance, if it’s being compiled as a VST3.
I’m not an expert on this but I believe the MIDI MPE standard is supposed to support the same thing, and JUCE has some support for that. You might want to look into converting the MidiBuffer to MPE?