Supposing for the sake of argument you wanted to multiply the amounts in your row together. You wouldn't want to include zeroes because if you did the answer would always be zero, so you could choose to set them to 1 instead:
=PRODUCT(IF(INDEX(B:D,MATCH("Net Cashflow",$A:$A,0),0)=0,1,(INDEX(B:D,MATCH("Net Cashflow",$A:$A,0),0))))
entered as an array formula.
This is just applying your formula along the lines suggested by @Jeeped.
But to answer your actual question, 'how would I get just the non-zero values returned as a row?' - the answer is, 'with difficulty'. It is possible because the Index function can be coerced into returning an array as in this answer
You can use the SMALL function to get only the columns containing non-zero values, but to do so you would need to create an array containing (in your example) two elements. One way of doing this is using Indirect. If you put all this together you get
=PRODUCT(INDEX(B:D,
MATCH("Net Cashflow",$A:$A,0),
N(IF({1},SMALL(IF(INDEX(B:D,MATCH("Net Cashflow",$A:$A,0),0)<>0,COLUMN(B:D)-1),ROW(INDIRECT("1:"&COUNTIF(INDEX(B:D,MATCH("Net Cashflow",$A:$A,0),0),"<>0"))))))
))
So it is possible, but...really this is how not to do it.