Instead of this:
{exp:channel:entries param="{exp:some:plugin}"}
...
{/exp:channel:entries}
Either use an embed, like this:
{embed="channel/entries" value="{exp:some:plugin}"}
{!-- And the embedded template: --}
{exp:channel:entries param="{embed:value}"}
...
{/exp:channel:entries}
Or use the plugin as a tag pair (if supported), like this:
{exp:some:plugin parse="inward"}
{exp:channel:entries param="{plugin_value}"}
...
{/exp:channel:entries}
{/exp:some:plugin}
Or add your own suggestions below.
You don't say why it's bad to pass a tag as a parameter, so here goes:
Despite these caveats, I still think it's a useful technique for certain things and has far less overhead than an embed.