There are quite a number of argument delimiters in use. Standard for an optional argument is []. But () (picture mode, tikz) and <> (beamer) is used a lot too. For verbatim input you can use \verb+some text+. Quotes have also been used.
But the braces {} are the only "real" argument delimiters. They must be matched, that means for every opening brace they should be a closing brace and they can nested: an argument {abc {xyz} def} will correctly find the closing brace and be read as abc {xyz} def.
All other argument delimiters work by looking for a char and then searching for a matching closing char. This means that one has to be a bit careful with the input.
With standard LaTeX commands e.g. [abc [xyz] def] will be give you the argument abc [xyz unless you protect the inner bracket with braces: [abc {[xyz]} def]. With commands defined with xparse [abc [xyz] def] will work, but here one would have to protect an unmatched opening delimiter: [abc {[}xyz def]