The issue is that we're running Windows applications, and so need to implement the FSCTL_DUPLICATE_EXTENTS_TO_FILE ioctl. Since file creation and the copy operation are separate, an application could create the destination file, possibly modify its attributes/add extended attributes/open additional handles to the file, and then clone the contents in.
I don't think it would be possible to implement that with full fidelity on top of clonefile()--we would need to get the paths to the source/destination FD (not ideal when we already have open FDs), clonefile() to a temp location, set attributes to match as much as possible, then rename the file to the destination path. Fixing up open handles to the original destination file to point to the new one would also be difficult at best.