This is surely possible, but the implementation details highly depend on what you're using already. For instance, when using FormTiddlerPlugin, you can do in your template something like:
<button onclick="
const container = document.getElementById('<id of your form container>')
const numberOfShownChildren = document.getElementsByClassName('<class of an input used for a child>').length
container.innerHTML += `<a piece of form that is used per child: inputs etc; if you want to use numbered fields for storage, use ${numberOfShownChildren + 1} to get a number inside this template piece, like name2 ← name${numberOfShownChildren + 1}>`
">
+add child
</button>
Substitute the
<id of your form container>,
<class of an input used for a child>, and
<a piece of form ...> bits with what you need – start from something simple, like:
<div id='myForm'>
<div class='child-subform'>child name 1</div>
</div>
<button onclick="
const container = document.getElementById('myForm')
const numberOfShownChildren = document.getElementsByClassName('child-subform').length
container.innerHTML += `<div
class='child-subform'>child name ${numberOfShownChildren + 1}</div>`
">
+add child
</button>