Currently, if a dynamic snippet is used without {snippet} or {snippetArea} parent, an exception is thrown. However, such behavior disables using dynamic snippets through define blocks, etc.
{define row}
<div n:snippet="row-{$id}">{$id}</div>
{/define}
{snippet}
{include row id => 1}
{/snippet}
This check could be moved into Runtime or more complex check could be implemented, but this could be pretty difficult.