We considered this in the past and decided not to do this.
There are a few different designs:
The first is to add a else block, which runs if the loop completes without breaking. This is usually regarded as too confusing. Python has a similar feature and there's been polling showing that most users don't know what it means.
The second is to make them evaluate to Option, as you've proposed here. This means that the type that for and while evaluate to will depend on whether their bodies contain a break with value expression (currently they always evaluate to ()).
I don't think this functionality is worth having to explain to users the nuance of how it works. It's fine to just use a mutable variable initialized to None instead, or use a loop loop, with value break depending on your use case.
Option is already hard coded into the language by the desugaring of for loop syntax. This might not be implemented by a lang item, but if that's the case its because its implemented a worse way (a hardcoded path). In general, turning fundamental std primitives into lang items is not a good reason not to implement a feature.