This is more of a general issue with executors as a whole though. There's no way presently to cancel a job, and jobs consume resources until the executor tries to run them; this isn't specific to jobs enqueued with a delay — it affects all jobs, including cancellable Tasks. I don't think we should hold up the delayed enqueuing proposal in order to fix that. Granted, that might mean some new APIs in the future.
I'm also not sure about all the mentions of swift_task_enqueueGlobalWith*. That API is being re-cored on top of this; it isn't the underlying implementation.
This was extensively discussed in two of the pitch threads. See for instance
[Pitch 2] Custom Main and Global Executors - #41 by John_McCall.
The definition of Clock says:
public protocol Clock<Duration>: Sendable {
associatedtype Duration
associatedtype Instant: InstantProtocol where Instant.Duration == Duration
...
so no, Duration cannot differ from Instant.Duration.
This also came up during the pitch phase. The reason for having both options in the protocol is that there are situations, particularly in embedded systems, where having to compute an instant is unnecessary overhead — in particular, reading a clock may not be a cheap operation — while they are able to easily wait for a duration.
It's also possible in some cases that, even on the same clock, the two operations are subtly different in character. For example, waiting for a duration might be immune to system clock changes, where waiting for an instant isn't.
There isn't a requirement to implement both of the methods, mind; if you implement one, the library code will do the mathematics to make the other one work.