It is possible to have product relationships - whereby if a user has product A - they can get product B for free. Product B is normally say $50. So if user logs in and purchases Product B - because they have Product A - the value of Product B = 0. Hope this is clear.
What you can do is setup a second version of product B that only is visible if product A has been purchased, you can then set the price at whatever you want. So; Product B NOT free rules are not visible if A purchased Product B FREE visible ONLY if A purchased