The AsRef trait is intended when a reference to some object can be used to cheaply get a reference to some other object, typically because it is stored as a field.
You can think of impl AsRef<Foo> for Bar as a "function" which converts &Bar -> &Foo. However, because we return a reference, the Foo instance needs to already exist. You can't create a new instance of some object inside a function and then return a reference to it because that's a use-after-free.
In the impl AsRef<str> for String example, the String type already contains a pointer to a str that lives on the heap, so all it needs to do is return it.
In your example, you could impl<'a> AsRef<C> for Ref<'a> by returning the reference in the self.c field, but because Owned doesn't actually contain a Ref, you can't impl AsRef<Ref<'_>> for Owned.
You might need to find a different solution like giving Owned a fn ref(&self) -> Ref<'_> method.