You can avoid it quite a bit, e.g. f(x,y) = (z=x+y; sqrt(z)) defines a function, with two statements separated by ;.
Obviously I didn't mean the implementation was based on MATLAB because that would be impossible.
They have the benefit also of being usable for indexing and array expressions
I don't know whether using {} for both types & blocks would be hard to parse, maybe it's possible. I have heard & can believe that parsing <> as a 4th ascii bracket is pretty tricky.
That's probably because < can appear without >, e.g. in a<b.
In the end my code ends up like python but with an extra end, which, while adding a possibly unnecessary line of code it at least makes it trivial to copy and paste something into the repl (or other part of the code) without worrying about indentation.
In the end it is the question, what kind of delimiters for your expressions you want to use. Some languages use end keywords, others parenthesis of whatever kind and yet others use indentation and whitespace instead, which perhaps could also be considered to be a form of delimiters. Having visible and matching delimiters or support for recognizing what end delimiter matches which start delimiter is essential for editing code efficiently, in my opinion.
I use a lot of Python, but the whitespace usage and non-visible delimiters are one of the downsides of the language syntax for me. Editing code when everything is an expression and is clearly delimited by matching parens is so much more efficient and fun.