How do I programmatically create a view whose structure is defined at runtime?
Ok - no answers and I've figured out two ways to do this.  

1. hook_views_default_views()

One way is to define the view in hook_views_default_views() and then to rest the cache for instance with views_invalidate_cache(). These views end up being 'in code' but not actually set.  This didn't seem like the most desirable method for my use - but might be better for some applications.

2. save the $view

Create the view e.g. $view = new view(); and fill all the fields, and then $view-&gt;save() saves it to the views database. Keeping a record of the name of the view allows you to delete it later if necessary etc.