For JS on the client side to be able to behave in the way you describe, it has to be informed by the server about the unskippable parts. Thus browser extensions are informed as well, and can take action correspondingly. In the worst case, they’ll behave as YouTube’s new hold screen does now.
Anything that JS on the client can do is also under control of browser extensions. We are talking about YouTube’s options under that constraint.
I don't think there's any reason the JS would have to know ahead of time, and the server still controls what video fragments are served when, so I don't think JS can be reliably used to skip ads that are embedded in the video stream, especially if the download speed is limited to somewhere close to the playback speed.
When the player performs a skip, it waits for stream packages whose timestamps match the new position after the skip. It’s the client who requests a different segment of the video, and waits until it receives the respective segment, as identified by the embedded timestamps. Skipping isn’t a purely server-side operation in that sense, the client side has to cooperate. The server has no control over which timestamps the client wants to play.
The only other alternative is to make the video a live stream of indefinite length where the user can’t skip forward beyond the farthest point they already played.
I'm not sure what point you're trying to make, or how it invalidates anything I said already. Not trying to be rude, I just don't understand where you're going with this.
Anything that JS on the client can do is also under control of browser extensions. We are talking about YouTube’s options under that constraint.