If you read some of the responses in the other thread, I think the answer why they don’t pass is about VST3—sadly, it is a known limitation to that plugin format. (I had forgotten that, honestly)
You can do a web search on VST3 and Program Change and you’ll see endless comments on various forums lamenting this limitation. So its not really about GP not handling the messages correctly. It can only handle what the plugin format allows.
When you use GP Relayer within GP itself, its not using that same VST3 plugin, which explains why it works internally, but not when using an external source.