Where can I save a CSV file that I construct dynamically to make it available for download?
The best practice is to use Drupal functions, not direct PHP functions, if there is Drupal API available. Particularly, here you may be interested in file_save_data and file_unmanaged_save_data.

If you want file available for short time, unmanaged file may be the way to go. But if you want periodic exports, archiving of prepared files, automatic clean-up etc, Managed is the way to go. If in doubt, try managed.

Examples for Developers offers a pretty good file_example.module, read it, play with it, and come back with more specific question.