Hey Mark,
From a design perspective, do you recommend that I create 1 key / user and turn on each feature (I'm planning on using a Y / N value for each custom license field) as they buy them
Yes, that's the best way to do it.
If it is the former, do you have any sample PHP code to show how this could be done during the purchase process (via PayPal)?
Well, the web API pack has an example showing how to do things after an order on PayPal. Use the SetPKeyDetails() function from the LimeLM.php file. To automate everything you might want to look at the paychecker.php file (that's what PayPal contacts after a successful order, so you'll want to modify it for customers purchasing new features from you).
Does that make sense?