Interesting idea on the forms.
Re: "Yes, that works around the problem, but then you're no longer scoring leads in the same way."
It seems to me we are still scoring leads the same way because all the webhook does is add behavior score + demographic score and store the result in a combined score field. So as soon as the lead (really) becomes known, that formula will run and the result will be the same as it would have if the combined score field had been populating behind the scenes while the lead was anonymous.
If I think harder about this I guess there are some rare (I think) exceptions where the lead becomes known via a non-scored activity. The only one that comes to mind is if the lead is created in SFDC. And the form treatment you outlined above wouldn't solve that one.