Would implicit `await` really be a bad idea?

Depends on if you rely on the Sendness locally, or just provide it as an API guarantee. If the latter then you'll have to litter your async fns with

async fn foo(bar: Bar) { ... }

fn _assert_foo_send() {
    fn assert_send<T: Send>(t: T) {}
    let bar = create_bar_somehow();
    assert_send(foo(bar));
}

I guess technically you should be adding this anyway if you intend to make it an API guarantee, and maybe we'll get something like the "Sugar for bounding the return type" from here in the future.

Closures don't depend on the evaluation order of their body, they only depend on the environment captured by it. Generators (and therefore async fn/blocks) extend this with a subset of their local variables, those that are live across a yield point.