I've done something similar to this recently, and I went through the same though process as you've done!
I initially added a new Channel for plans, and built each plan as an entry in that channel. These were then selected in an Entries field for the pricing page entry. However, after building this solution locally, I felt like it was overkill for my particular use case.
In the end, I asked myself 'Will I need to reuse any of the data that's shown for each pricing plan anywhere else?' and the answer was 'no'. I removed the plans channel and ended up using a Super Table field in my pricing page entry type, with fields for the plan details inside the Super Table.
This was specific to my use case though, where I knew I wouldn't need to surface the plan data on any other pages. If you do need to reuse plan data elsewhere - and you probably will - then I'd stick with my original solution of defining the plans in a Channel as entries that can then be selected in an Entries field in your pricing page entry type. This way, the data for each plan is held in a single place and you get all the standard entry functionality (like draft entries, date expiry etc.) for your plans, which can be helpful.