Virtually all apps (V4L1 & 2) can handle YUV and RGB colorspaces.
Certainly all the major ones do and all the major libraries as well.
The problem is when the device only supports some vendor specific or
otherwise very uncommon format. In that case not doing the conversion in
the kernel means the device won't work with any existing software without
patches. In this case, while it's not "the right way", drivers often end
up including an in kernel conversion for pragmatic reasons.
This was a problem with the bayer format, but now userspace support for
that format is more common.
--