I'll answer that with a question (not being sassy, just illustrative): What do you see as the benefit of using apt get instead of compiling from source? Why does NuGet distribute DLL files instead of source code? Do you think it would be better, when you do docker run docker.io/alpine for it, instead of pulling a filesystem gzip as it currently does, to clone the alpine repo and construct that on your local system?
It ultimately just goes back to the general sofware architecture question of "where is it (dis)advantageous to cache?".
With C++ there are advantages to compiling from source instead of using ELFs, because there are dozens of compiler options that, if mismatched, can cause linking or runtime errors. That's why we have Nix. C as well, but to a lesser degree. If there were a Dagger C++ SDK, though, those flags could be standardized to enable binary distribution.
With JavaScript, Python, and other interpreted languages, it's sort of fundamentally impossible to have a difference between "the source" and "the build". There's more nuance to it than that with minification, but it's besides the point.
When it comes to C#, Java, and other JIT'd languages, with their excellent IL specs and robust reflection and dynamic dispatch systems, you basically lose all of the reasons to prefer source code over IL, as long as you're not planning to iterate on that source code yourself.
Dagger caches, yes, but not having to check the hash of a bunch of source files makes a difference, and cold start time negatively impacts the elasticity of a scalable build infrastructure. Reducing disk requirements is a good thing. Users of a C# module who are not themselves compiling C# projects in their Dagger engine would probably rather not have the 700MiB dotnet SDK that's required to build from source taking up space in their finite cache.