I've used the \internal command in doxygen extensively over the years, and I really miss the functionality in rustdoc. It is possible to emulate it, using this technique, but it is kind of verbose (compared to the \internal command in doxygen). That said, the rustdoc way to do it has its upsides (like how you can add sections that depend on other features as well).
It's not quite what you are looking for because you can't keep the implementation docs next to Public's definition, but you could combine #[cfg_attr] and the fact that you can do #[doc = include_str!("...")] to conditionally include detailed docs from an external file.
// A public struct.
#[cfg_attr(feature = "implementation", doc = include_str!("./public.md"))]
pub struct Public;