Since my early days working on Dapr I've noticed that we differentiate our runtime modes (Kubernetes vs local) for a single purpose (this is an assumption, correct me if I'm wrong before diving into the discussion): having access to the Specs (Configuration, Resiliency, Component and more) and receiving component updates.
When running on standalone mode those specs can be read from disk (using our homegrown disk loader, when running on Kubernetes mode we get those from the Operator APIs.
So, the operator is not only a Kubernetes operator itself, but it also serves as a "remote Manifest Loader".
The process to read the manifests is remarkably like the standalone mode but instead reading those specs from disk, the runtime makes requests to the operator API and retrieves the manifests back (serialized as a []byte)
At the same time, we strive to provide the same set of features for both "modes/platforms" and be prepared to support more platforms in the future.
In addition to that, we have our injector that is responsible for patching the application pod and prepare the environment to get the Dapr and the app running with proper config.