I'm not sure I follow completely, but I think the problem is the
compound-paragraph parsing that is triggered by the lack of space
between the two `para` calls:
@foo{@para[#:style "foo"]{Bar.}
@para{Bar.}}
If you change it to
@foo{@para[#:style "foo"]{Bar.}
@para{Bar.}}
then the "SIntrapara" layer goes away.
If all the arguments to `foo` will be paragraphs, then one solution is
skip the `decode-flow` call that is creating a compound paragraph. In
that case, use square brackets, since `foo` then expects normal
arguments instead of text-mode argument:
@foo[@para[#:style "foo"]{Bar.}
@para{Bar.}]
Meanwhile, it may be that compound paragraphs do not render in to HTML
in a valid way (within a nested flow?). But I think the immediate
problem is that you don't want the compound paragraph.