According to the GeoPackage standard http://www.geopackage.org/spec121/index.html#example_feature_table_sql the primary key column must be of type "integer autoincrement". The standard has an example SQL for creating a feature table and it begins
CREATE TABLE sample_feature_table (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
Only the INTEGER AUTOINCREMENT part is mandatory. The name of the PK field does not need to be "id" and GDAL and QGIS are using a default name "fid" for the primary key as you have noticed. The user interface of the QGIS DB Manager is lacking an option for naming the PK field into something else but you can do that with ogr2ogr.
The GeoPackage driver manual https://gdal.org/drivers/vector/gpkg.html lists a layer creation option
Column name to use for the OGR FID (primary key in the SQLite
database). Default to “fid”
Use ogr2ogr like this
ogr2ogr -f gpkg -lco fid=gid gid.gpkg test.gpkg
ogrinfo gid.gpkg -al
INFO: Open of `gid.gpkg'
using driver `GPKG' successful.
Layer name: test
Geometry: Unknown (any)
Feature Count: 2
Extent: (340.000000, 349.000000) - (428.000000, 380.000000)
Layer SRS WKT:
FID Column = gid
Geometry Column = geom
NOTE I am not sure what the options "Primary key" and "Geometry column" in the DB Manager UI should do but by looking at the source code at https://github.com/qgis/QGIS/blob/master/python/plugins/db_manager/dlg_import_vector.py I suppose that user can select some existing field from the source data to be used as primary key, as well as select which geometry column will be imported if source data has many of them.