After a lead has been converted in Salesforce all its fields are locked and can no longer be edited. The lead ceases to be relevant after conversion as all future changes should be on the Contact, and relevant fields mapped between them, so if you need to update Source in future, it should be on the Contact, not on the underlying lead. Even the dataloader can't touch the values on a converted lead. The whole system is designed for that info to be mapped to other fields and passed off into the remainder of the process. So unfortunately there is probably no fix for your historical underlying lead source issue.
Also, standard functionality in Salesforce automatically maps lead source to opportunity lead source on lead conversion. When you change the values in the lead source picklist the opportunity lead source picklist also updates. You can change that value afterwards, but it's default behaviour. You can, using a workflow, automatically populate the opportunity lead source from somewhere else - it would be largely dependent on where you created it. For instance, if you created it from a Contact it could pull the Contact's lead source through and populate the field. It'd be a fairly easy thing to build.