you use a recordset to determine whether to show the download link or not based on the number downloads. by using a where clause in the recordset you can check todays date against an expiration date or the download count column against the number of allowed downloads.
yes, your products can include sub products, though the sub products will not display in the cart as separate line items.