Using FormatterServices.GetSafeUninitializedObject for this is the best solution and patching it in ReflectedInspector.DirectFieldControl to make use of it with the “(null) Create” button is also the best place to add it 🙂
GUI is indeed a whole different story, but you could write a custom ObjectDrawer for that and it should work fine.