The simple answer to your question is No
Yyou use Collapsing Whitespace markup to suppress the line-breaks within you Passage content being automatically converted to HTML br elements, and then manually inject br elements where they are actually needed.
note: There are a number of issues with your example:
1. You shouldn't use the is operator to check if a Boolean value equals true or false, the correct syntax to do that is.
(if: $hungry)[The hungry variable currently equals true]
(if: not $hungry)[The hungry variable currently equals false]
2. There are no end paragraph element tags </p> in your example, this means the web-browser needs to guess where they should be placed. In Chrome this resulted in one of your paragraphs being embedded within another, which is generally not ideal. The following is an example of the HTML structure being generated for your Passage, assuming the $hungry variable equals true.
<tw-collapsed>
<p data-raw="">
<tw-expression type="macro" name="link-goto">
<tw-link tabindex="0" passage-name="eggs" data-raw="">Yes, please.. </tw-link>
</tw-expression>
<tw-expression type="macro" name="if"></tw-expression>
<tw-hook>
<p data-raw="">
I'm starving,
<tw-expression type="macro" name="link-goto">
<tw-link tabindex="0" passage-name="eggs" data-raw="">bring them!</tw-link>
</tw-expression>
</p>
</tw-hook>
<tw-hook name="vegetarian"></tw-hook>
</p>
<p data-raw="">
Thank you, I'd rather get
<tw-expression type="macro" name="link-goto">
<tw-link tabindex="0" passage-name="coffe" data-raw="">some coffe.. </tw-link>
</tw-expression>
<tw-expression type="macro" name="click"></tw-expression>
<tw-hook></tw-hook>
</p>
</tw-collapsed>
3. Due to how the (click:) remated macros are implemented you should only use them when it's not possible to use a (link:) related macro to achieve the same result. I suggest changing the first line of your example to
Servant has approached, carrying something very (link-repeat: "stinky")[(show: ?vegetarian)]