Here is what I did in the end. I like Mike's idea of a multi-select grid and I may ultimately re-implement with that. In the end, I used a section at the bottom with contingent visibility. Click on the "Add a Customer" button and a field to add the customer shows. It sits inside a simple non-persistable entity that I use for variables of different types. Then you enter the string value, click to save, and a microflow executes to add / refresh. Works great.
I have used a number of different approaches for this situation. A couple that may give you a starting direction:
As an example, I have a page that enables the user to add Customers to a Program (while in the Program edit page). The Add Customers page looks like this:
The important piece to this page is the XPath on the nested Customer List View. That XPath looks like this:
[not(Building.Customer_Programs = '[%CurrentObject%]')]
So that List View will display customers that don't have an association to the displayed program. Add to Program calls a microflow that adds that customer to the reference set.
It would be easy in this case to create an Add button that will pass in the program, Create a new customer and let the user enter information about that customer.
The other important page in this scenario is the remove page, which looks like this:
This is pulling customers currently in the program. The microflow behind Remove from Program is self explanatory.
Hope that helps,