There are plenty of languages with warts at least as bad as JavaScript's. Bash, PHP, C, even relatively sane languages like Python still have huge issues like implicit variable declaration.
Nope. In Rust, a semicolon denotes a statement while a lack of semicolon is an expression so you can't just omit them at will. This does lead to cool things though like if/else blocks being able to produce values if they end in an expression. But the expression type is checked so you're less likely to make a mistake. You can see an example here: https://doc.rust-lang.org/rust-by-example/flow_control/if_else.html
In JavaScript I never skip semicolons because I've seen those subtle bugs.