Hi Shii,
As you said, this feature only works for subscription center.(when user changes its consent level field or add/remove a subscription list)
Due to your requirement is to generate new lead by clicking the "Accept Registration" link, so I assume that you would accept to generate contact record at first.(and we have to do, because we can't even hold marketing activities if people have not corresponding contact records in system.)
1. Create a custom optionset field for contact entity, let's name it "Accept Registration", and assign the field with 3 options.
* unknown(default)
* agree
* disagree
2. Create marketing form 1 with following fields:
* First Name
* Last Name
* Email
3. Create marketing form 2 with following fields:
* First Name
* Last Name
* Email
* Accept Registration
4. Create a marketing email as confirmation email, add a button and attach the link to your CMS System page where embedded marketing form 2.
5. Create an inbound customer journey to send confirmation email.

6. Create a background workflow:
entity: contact
starts when: record fields changed(Accept Registration)
scope: organization
step
if Accept Registration field equals "agree"
-> create a lead record from contact context
The description of whole process:
1. When a person submit marketing form 1, he'll be saved as a contact and receive confirmation marketing email which contains link to marketing form 2.(confirmation form)
2. He/she can manage preference on marketing form 2, it will work as "double-opt-in" feature when he/she submits marketing form 2.
You need some javascript skill to prefill previously submitted data:
2.1 In marketing form 1 page, use marketing form API to collect input fields data at "formSubmit" event.
https://docs.microsoft.com/en-us/dynamics365/marketing/developer/marketing-form-client-side-extensibility#form-events
2.2 Use localStorage object to save these data in user's browser cache.
https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
2.3 When person navigates to marketing form 2, populate fields with saved data in localStorage at "afterFormLoad" event.
3. The workflow will be triggered and decides whether to create new lead based on the option value.
(A background workflow does not take up a lot of resources.)
Regards,
Clofly