In CiviDiscount 3.1 it seems you can set up discounts based on Membership ('Discounts for memberships') as well as in Automatic Discounts (discount for members of type, membership statuses). Why isn't membership + status just in the 'Membership' section? (and why no selection for Contact subtype in Automatic Discounts?)
To answer the first question, the difference between the two is that the Discounts for memberships is where anyone with the code can get a discount when purchasing a membership (Civi help: "Discount the price of purchasing memberships. Only active memberships with start and end dates defined will appear in this list."). Automatic Discounts, on the other hand, is where any contact that meets the conditions outlined will get an automatic discount applied; no code required. And the discount will be applied to either memberships or events.
It might be clearer with a couple examples. In the first case, someone visiting the site can enter a code into the box and then get a discount on a membership they want to purchase. In the second case, someone might get a unique URL by email and Civi will know which contact it is. If, say, that contact meets the condition of being over 65 years old, they will get an automatic discount on an event. Or maybe they'll get a discount for an event because they're a Lifetime member.
To answer your last question, why no selection for Contact subtype: this does indeed look like a missing feature. I suggest posting an issue to the extension in github: https://github.com/dlobo/org.civicrm.module.cividiscount/issues It might be possible to get the contact subtype by using the api field that you see when adding a discount, but that is certainly not for a beginner.