Customized Products
If a product needs to have personalized information associated with it, a custom line item will be required to hold that data, since the line item is stored on the order and only stores a reference to the original product. That is, when "customizing a product", you are actually associating extra customization with the product information. The data is never stored on the product itself. Once this paradigm is grasped, a world of possibilities opens up for using commerce -- any entity on a Drupal site can be sold or affect the price of a product.
Custom Line Item Fields
To hold custom line item fields, the Commerce Custom Product module will allow you to create new line item types and edit the fields on those line item types. For a video introduction, see this blog post. Using this method, you can create any number of custom fields on a line item.
Line Items & Entityreference Fields
In some instances, you may want to actually provide more information or integrate with another Drupal module. In this instance, you can add entity reference fields to a line item type and store a reference to a node, a registration, a form submission -- any entity. Then, using Rules or custom code, you can utilize this extra information in price or shipping calculations. Modules like Entityreference Prepopulate can help by providing more tools for populating those fields on product forms automatically.