Craft install via composer: install to public_html? When I do composer create-project craftcms/craft, it will create a web folder. My webroot is called public_html though. Can I change this somehow, or should I make a symlink? 

Or simply don't use composer to install in that case?
You can just rename web/ to public_html/, or move all the files inside web/ into public_html/. (Don’t forget to move the .htaccess and .env files, if the latter.)

As long as the location of the public_html/ folder is in the same place as the web/ folder was, you don’t need to change anything else.

my-project.test/
├── config/
├── ...
└── public_html/
    ├── index.php
    └── ...


If you need to change the location to something like this:

my-project.test/
├── craft/
│   ├── config/
│   └── ...
└── public_html/
    ├── index.php
    └── ...


Then just make sure that your CRAFT_BASE_PATH constant points to the right base path (craft/).

// old:
define('CRAFT_BASE_PATH', dirname(__DIR__));

// new:
define('CRAFT_BASE_PATH', dirname(__DIR__) . '/craft');