If you have permissions to edit custom fields, most actions have a green button in the one-to-one form sidebar when you are viewing the create page that says "Add Custom Form HTML". Click that button to open a text box where you can add custom HTML to the form.
You can type almost any HTML you want -- every form input will work, as well as basic javascript/jquery code for form logic. Whatever activists enter in your custom form inputs will be stored in the database under whatever form input names you chose, which you can then use to target emails or pull data from using reports.
Using the same form names on different pages will allow you to pull the same data across pages and will overwrite an activist's past answer stored in that form name. For example, if you use the input name "story" to collect people's stories on multiple pages, when you pull a report for the input name "story" you'll receive stories from every page using that input name unless you limit your targeting to one page or another, with the latest story per activist.
This means that you can collect standard information from activists by using the same form name every time. If you would like to make sure no overwriting occurs, use a unique form name on each page (like social_security_story instead of just story).
Note: If you change the sponsor of the action and you don't have permission to edit custom fields on that new sponsor, all custom HTML you've created will be removed. You will be prompted to confirm your change before the HTML is deleted.
If you would like your custom HTML to display somewhere else on the form, use the HTML question type in the visual form builder. More here.