Why should I use an ~/extensions directory rather than the default ~/ext for new extensions?
The ext dir that ships in the tarball is for extensions bundled directly with core like IATS. If you put other extensions in there they will get wiped when you upgrade, so it's common to put them somewhere outside the civicrm folder.

See also https://docs.civicrm.org/sysadmin/en/latest/customize/extensions/#enabling-extensions