How can I allow front end users to add their own custom fields?
Use Field Collection module.

Install Field Collection module 

Create a field collection field to a content type and set to unlimited.

Then create a fields with two text fields - "label" (for 'colour' and 'year') and "value" for that field collection

So when the node add form loads user will have two fields, Label and value with add more button there user can click and add another set of "label" and "value" pair.