Hi Neil,
We have resolved the problem of storing custom fields 🙂 Only the layout issue left.
Regarding the 3rd party form, I have experience with Gravity Forms the most, and it works really well for all the situations I had in the past. So it's my obvious recommendation. WPForms and Ninja Forms are also popular, but I don't like their UI in the back end. Ninja Forms used to have a nice UI that blended well with WordPress, but it changed :(.