There is no useful "STDIN of A" in this scenario. The STDIN is always that of your application. a, b and c write to their STDOUT, the parentheses put them together, and the pipe connects the result to yourapp's STDIN. Where, yes, all those STDOUTs might conflict (one after the other, not intertwined).
( a ; b; c ) | yourapp
( a && b && c ) | yourapp
It is unclear whether you have a, b, and c inside a shell script ("that app's shell script") and whether it is the same script for all. If it is not, then the scripts are your "apps" and you are in the scenario above. If it is, you must have something like
while ...; do
In the above scenario, the "read" will read the common STDIN of the outer application, again in order, possibly blocking if there is nothing to read, but I don't see how A can push anything in there.
I can't be sure, but I suspect this might a case where named pipes or message brokers might come in handy.