Note that you can want that at a semantics level though, escaping closures means resources escaping. In low level languages you may want to make your analysis simpler by not allowing it, even if it’s implemented as a full closure under the hood.
That’s similar to languages which only allow second-class references (references which can be passed as parameters but not returned or stored) so they do get the efficiency of references in many cases but don’t have to deal with the complexity of a borrow checker or something along those lines.
Self notably used “inner blocks” if I remember correctly, when I played with it I was surprised that you couldn’t really return blocks. This may have been a limitation of the original VM though (to not have to deal with the cycle a block’s execution causes).