Ok, so after a LOT of trial and error and a LOT of thinking about this I've finally come up with a fairly satisfactory solution.
First of all I created a DataExtension for UserDefinedForm.
In this DataExtension I added a new widget area, just for user defined form page types.
This then enabled me to use the $only_available_in property in my widget(s) to specify which widget area (rather than page type) they should be available in. I also removed the default widget area ('$fields->removeByName('Widgets');') so I didn't have them both showing up in the admin interface.
Finally, in my 'templates/[my-theme]/templates/Layout/Page.ss' file I added a simple conditional block to only output the user defined form widgets if the page type was 'UserDefinedForm':
<% if ClassName = UserDefinedForm %>
<% end_if %>
It's not as simple or elegant as I would like, but it works. It would be much better if widgets had a $allowed_page_types property (so you can just specify an array of page types you want the widget available on), but my knowledge doesn't go far enough to know how to set that up.
Anyway, I hope my example above helps others with a similar problem.