Agreed, take the scores that you want to grade on then have a total score field which sums up your important scrores. Based on your corng model you should have different thresholds. The total score would be used in a workflow and populate a custom field called "Lead Grade" as the score passes certain thresholds the grade would either increase or decrease.
Trigger: Listen for "Data Value Change" in "Total Score".
Workflow: "Change Data Value" of "Lead Grade" and then do constraints...
It would look roughly like the image below (Lead Attribute for change would be "Lead Grade"):
