Or is this impossible as the struct must own the data it carries?
The situation is I have an enum-like thing going where I have a tag and some data. If I own the data, I can return an owned enum variant produced from the tag and data, but if I'm borrowing the data, I'd like to return a borrowed enum variant.
Borrowing requires the thing to already exist in memory, exactly in the final format required to borrow it. This happens to work in some cases, e.g. &Option<T> can be changed to Option<&T>, and loan of a struct can be split into loans of its fields.
However, it's not possible to guarantee that two independent function arguments form a cohesive struct in memory (even if the addresses happened to match, it's still not allowed per Rust's borrowing rules), so the specific case of fn(u: &usize, s: &String) -> &Composite is not possible.