You can just construct it the usual way for a Box – do a conceptual move (that is optimised out) of an object of type T into a Box<T>, then (if you want the box to have an unsized type) unsize the resulting Box. (Making the allocator know the size at compile time is also easy – just give the allocation methods a generic parameter for the type. I was planning to do that anyway – allocator implementations love knowing the size at compile time, ti can make them massively more efficient.)
The alternative of creating the object as a T and doing an in-place transmute into an initialized MaybeUninit<T> would also be viable, but as you suggest would need compiler magic because Rust doesn't currently have in-place transmutes (a strong update would be sufficient).
It's certainly playing around in the same space that I am (and it's one of the sources of inspiration for what I'm attempting). But I'm trying to abstract things at a lower level, where hopefully it's less complicated.