I think there are natural, distinct roles for Components and Composers w/ Partials. These roles come from the differences you mention: local vs global variable inputs, components being context-agnostic, and the vagueness of variable scope in Composers.
For me, I use Components when I need to pass data to an included template, and I use Composers w/ partials when I need to include a global template part. Even the language feels natural: Components are little snippets of code that process data (Social Icon, Button, Heading, Image), and Partials are template_parts that take global variables rather than local ones (sidebars, footers, headers, contact form popups).
For this reason, I think it would be more unnatural to include an <x-post-content .../> with a bunch of variables every time, rather than including a template partial with it’s own data controller. I suppose it boils down to composers getting their data directly from the DB, and components getting their data from attributes. When you’re going to grab the data from the DB anyway, use a partial.