Hi, cowgirl

It was a tricky setup, but I think I have solved it.
demo:
http://koro.tk/cowgirl/ admin:admin
3 templates: Products, Options, Groups. Relation editable exists only in Products, which is related to Options.
I will try to describe the logic behind the solution. First, we need to specify an option for each product. Then we go to Groups and create a new group. Every group (clonable page in Groups) has an editable checkbox. It has no static op_values, only dynamic ones. Through this checkbox editable with dynamic values, I run a snippet, which enumerates options and then product for each option, creating a customized selection region:

- download (1).png (23.37 KiB) Viewed 3079 times
You can see here rows, which is one row per Option. Total, I have 6 products and 4 options, but as no products associated with 4th option D, then it is not shown. Instruction for user is provided to select only one product per row and this will help you to have one product per option.
Now, upon selection and save of this page, you can immediately visit 'linked' products in Products template and see that an editable checkbox appeared, dynamically showing related products. This is only for visuals, and there is no need to click there. Basically, upon every load of this page a dynamic snippet runs and looks for any group that consists of name of this product (this is done with custom_field parameter and intentional use of '=' instead of '==' inside that custom_field parameter of cms:pages).

- download (2).png (17.97 KiB) Viewed 3079 times
Now, let's go to create a new group of products. As far as we have dynamic showing of available products, we can filter our those, that already were used in other groups.

- download (3).png (16.52 KiB) Viewed 3079 times
This can be a bit difficult, is more like magic. How do I show all products for the first group and only 'unused' ones for the next group? I have created a list of all used products as a variable
linked_products. Then in cms:pages loop, I add page_name parameter:
- Code: Select all
page_name="<cms:if linked_products >NOT <cms:show linked_products /></cms:if>"
It makes possible to have
page_name="" for the first group and
page_name="NOT product-2, product-4, product-5" for the new group. For the very next, third, group the list of
linked_products will be again updated and therefore ready to be grouped. Another trick is to exclude current page from
linked_products , because we don't want to select products to group and have them disappeared

so, need to include this parameter while creating list of
linked_products - Code: Select all
id="NOT <cms:show k_page_id />"
Probably, with the setup above I could wrap up the solution, but we'll add a bit of usability to it. On every load of clonable group, a snippet runs and checks page titles of groups. It is very nice to have a meaningful group name, instead of some arbitrary and silent titles like 'Group 1, Group 2'. So, if script encounters a bad naming, it automatically renames other pages to something like this (totally customizable):

- download (4).png (8.63 KiB) Viewed 3079 times
I hope you check the demo and find it helpful.