It is generally recommended to use a directory for a package in the project workspace. So you are right that your project will have a folder structure as you have mentioned.
You do not need to use force-app, feel free to use the folder name that is more meaningful.
Example project workspace directory names as below
It is also recommended you enable source tracking on your sandboxes or use scratch orgs. That way it is easier to use commands like
force:source:pull that automatically pulls into respective folders as long as you have a project directory path defined in
Take a peek into one of the sample apps Easy-Spaces repo and see how we compose the app into modules or packages and map to the directory in the
sfdx-project.json and also configure dependencies.
Also, one thing to note is not every metadata is supported for unlocked packaging so it is better to not put them in the package but still have a folder (
unpackaged name fits well) where you can group them and deploy them using
force:mdapi:deploy after/before you install the packages.
When you finally are done with the development you create package and package versions using the Salesforce command-line tool (CLI) by providing the package directory and package name.