Maybe my screenshot of Unreal Engine above could explain a little?
Maybe I'm still not super clear about my needs? Let me try again.
When a node expects multiple inputs, the most common architecture I've been exposed to uses multiple input ports on the message receiver end. In those cases, there is NO ambiguity among the message topics, e.g.,
The GetFile node in the screenshot expects 5 inputs, each with a specific name and variable type. This allows for a one-to-one mapping between any output port and input port, so that the ports easily accepts or rejects data inputs that don't fit.
With Node-RED, the message receiver node can have only one input port. Therefore, if I try to feed the same 5 pieces of info into that single port of my GetFile node made in Node-RED, I'll most probably use a Merge node to aggregate 1-5 other nodes' output messages so that a packed message is sent through that single connection to my Node-RED GetFile node's single input port. Then GetFile node must distinguish between those 5 streams of arguments internally, and match them with its own 5 internal variables used by its own main logic.
Just look at the 4 nodes in the screenshot above, the 3 red ones and the blue one outputs info through their own ports with specific names.
So back to Node-RED, with a mirrored case, here I assume a name-matching must happen at the junction of those 4 nodes and GetFile node. Now, because other nodes that output the info that GetFile needs will name their output message in an arbitrary manner (there may be other nodes out there that are perfectly fine to connect to GetFile), GetFile will be unable to perfectly predict how other nodes may name their output messages' topic, and with the Merge node in between and without Change to explicitly translate the topics, GetFile will fail to use the 5 pieces of info.
I think @Colin may have got the idea, but just in case I haven't made my point to everyone in the thread.
I'm trying my very best to speak out loud what the screenshot above says.
There are other cases out there, such as this !PureData math
This is actually fine with Node-RED because the input arguments are symmetrical. Their "topics" are the same: numbers.
However, in reality, the majority of the cases I deal with demand that I pass various data types bearing specific meanings (file paths, shopping lists, text, numbers, ...) around to various nodes that uses 2+ inputs.
With the Unreal-Engine-like architecture, it's fairly easy to set up internal port-by-port data validation to accept/reject incoming data, which will work for all cases without the need for a name matching.
The realistic problem I'm facing is to control the complexity of an overall workflow, the exponentially growing needs for Change nodes to act as topic adaptors is a source of complexity and also a usability annoyance even with Colin's idea about using a specific config field per node for user to specify at every node-to-node junction.