Depends on your form's scenario. I don't think one can say that one should always use Programmatic Inserts of rows. Nor can one say you should always use the default InfoPath widgets that exist. It depends on the requirements of your form.
In general, use buttons and programmatic inserts when you want to control how many rows the user is adding or do some extra validation when they add a new row (easier to add it codelessly as part of a rule on the button).