With the new release of the Option Sets API endpoint there are some points worth clarifying.
Some items are listed with is_modifier as false because option sets on the POS interface allow for nesting, meaning a product that has option sets assigned can be used as an option of another product.
This allows for complex combo selling and contextual pricing eg a Burger Meal and so on.
Respecting this is important as it benefits clear reporting and has a big impact on printing rules which only apply to products (modifiers follow the product their attached to).
Items that are NOT modifiers and are added to a sale via an Option Set are called Child Products and they can have pricing that is specific just to this option set that overrides the normal price they're sold at elsewhere.
In my Burger I have three option sets:
Here I have my types of burgers, I can also attach option sets to each burger to further customise it within this combo.
Here I put three sizes of chips, or different kinds of chips and could optionally setup an option set for seasoning or sauce for the chips.
Here I would have my different types of Soft Drink, Milkshakes etc. Option sets associated with these might be Ice with a no ice or extra ice option.
You'll see now why I want the Burger, Chips and Drinks as Child products (ie they be showing as is_modifier set to false and would be available elsewhere on the menu) so they are distributed appropriately to production printers and reported as their own items and can have their own option sets if necessary
By understanding the relationship you can better replicate the POS selling flows automatically for customer facing displays