What is the right way of installing Drush? The http://docs.drush.org/en/master/install page states:


  Drush 9 only supports one install method. It requires that your Drupal
  8 site be built with Composer and Drush be listed as a dependency.


and if you go to https://github.com/drupal-composer/drupal-project and follow the given steps, in particular run the composer create-project drupal-composer/drupal-project:8.x-dev some-dir --stability dev --no-interaction command, then:


You will have to create an empty directory (otherwise it will complain the given directory is not empty);
It will create Composer structure with Drupal 8 located in web sub-directory;
It will also create vendor sub-directory with lot's of other sub-directories as:

alchemy       composer           doctrine         fabpot          league       phar-io        sebastian    theseer
asm89         consolidation      drupal           grasmash        masterminds  phpdocumentor  squizlabs    twig
autoload.php  container-interop  drupal-composer  guzzlehttp      mikey179     phpspec        stack        vlucas
behat         cweagans           drush            instaclick      myclabs      phpunit        stecman      webflo
bin           dflydev            easyrdf          jakub-onderka   nikic        psr            symfony      webmozart
chi-teck      dnoegel            egulias          jcalderonzumba  paragonie    psy            symfony-cmf  zendframework


Now with regard the new way of isntalling Drupal 8 I have two questions:


Previously we would install Drupal 8 in document root set by control panel. Different control panel have different document roots, ours default them in /home/username/public_html. 


Now, with the new way of installing Drupal 8 we end up with document root located in /home/username/some-dir/web, which does not play nice with our control panel's defaults. So I wonder what is the best recommended practice here?

Creating symbolic links between the old and new document roots also have its issues. For example, if you switch to /home/username/public_html (which is a symbolic link to /home/username/some-dir/web) and run the composer update command then it will give:

No composer.json in current directory, do you want to use the one at /home/username/some-dir? [Y,n]? 


and we would really like to avoid this kind of extra steps, but at the same time respecting our control panel's default settings. 

Changing the default setting for document roots in control panel is also not a good option as there could be lot's of old and non-Drupal websites on servers, so the old document root must be kept.


Do we have to have Composer structure with lot's of sub-directories like ones in vendor in every website's home directory? Please note that in my test setup Composer is installed globally. But when you run the composer create-project drupal-composer/drupal-project:8.x-dev some-dir --stability dev --no-interaction command it creates all those directories within a website's home directory.
You do not necessarily have to run composer create-project drupal-composer/drupal-project:8.x-dev some-dir --stability dev --no-interaction to create a new Drupal 8 site using the drupal-project composer package. 

You can also just download the composer.json of that project and place it into your future Drupal 8 base folder. Then you can alter the installer paths within that composer.json to your liking. So if you prefer public over web as your Drupal root, then rename that part of the installer paths. You may also wish to alter the project name or other details of the composer.json file.

After your customization, you can then run composer update to generate an according composer.lock file. Assuming you did so on a local development environment, you can then use composer install --no-dev on your production system after uploading your composer and custom files/checking them out if you use a code versioning system.

Coming to the folder structure: It is advisable to keep the folder above the Drupal 8 root as base folder of your root package (project), location for the composer dependencies (vendor folder), Drush site settings, and auxillary files that should not be directly accessible from your web URLs (e.g. exported configuration files, private files, temporary files, Node.js packages, ...).

Therefore you should consider pointing your virtual hosts' root directories for example to /home/username/public_html/web (or /home/username/public_html/public, if you customized your composer.json like that) while using the regular root directories of your hosting panel /home/username/public_html as composer root package folder.

Depending on your hosting panel, you may have the ability to alter the vhost root directory by overriding the web server settings (e.g. defining a DocumentRoot for Apache, or a root for Nginx). How to do this depends heavily on your used hosting solution and is therefore off-topic in Drupal Answers.

And yes, you will have this folder structure on every of your projects. As every project may require a different version of dependencies, different modules (which may add dependencies with certain version restrictions to the vendor folder as well), binary tools for the shell, probably applied patches and so on. These dependencies and their version requirements are project specific, even when you use a global Composer installation.