Если вы не хотите буферизовать всю таблицу, не буферизируйте ее:
<table>
<thead></thead>
<?php ob_start();?>
<tbody></tbody>
<?php $tbody = ob_get_flush(); ?>
</table>
Если вы хотите буферизовать всю таблицу, но хотите, чтобы тело таблицы было отдельно, добавьте еще один уровень буферизации:
<?php ob_start();?>
<table>
<thead></thead>
<?php ob_start();?>
<tbody></tbody>
<?php $tbody = ob_get_flush(); ?>
</table>
<?php $table = ob_get_clean(); ?>
Кроме того, вы можете очистить текущий буфер, не создавая новый. Я не рекомендую это, потому что это делает ваш код трудным для понимания. Это также глупо, поскольку, если вы просто собираетесь сбрасывать, не захватывая строку, вы, возможно, не буферизируете в первую очередь:
<?php ob_start()?>
<table>
<thead></thead>
<?php ob_flush();?>
<tbody></tbody>
<?php $tbody = ob_get_contents(); // only contains output since last flush ?>
</table>
<?php ob_end_flush(); ?>