You have an interesting problem. Your table "tab_without" is not actually without SRS but it has srs_id=0, which means according to the standard an undefined, geographic system:
The record with an srs_id of -1 SHALL be used for undefined Cartesian
coordinate reference systems. The record with an srs_id of 0 SHALL be
used for undefined geographic coordinate reference systems.
Changing the srs_id of a table from zero to to some other srs_id is technically not a simple procedure. It is not enough to update the srs_id value in tables "gpkg_contents" and "gpkg_geometry_columns" because the SRID of the geometry is also stored into the GeoPackageBinaryHeader of the geometry BLOB and therefore also the geometries must be rewritten. For making the updates possible some triggers must be removed first and re-created again after the updates. All that must be done correctly for not to destroy the integrity of the database.
All this does not mean that it could not be done if someone writes SetSpatialRef() but I doubt that it will happen soon. Meanwhile I would suggest to create a copy of the table and assign a correct srs_id at creation time like
CreateLayer( 'tbl_linestring', geom_type = ogr.wkbLineString, srs = srs) where srs if for example
srs.ImportFromEPSG( 25833 ). Once done you can drop the original table. Because of triggers I do not recommend to try to rename the new table to use name of the old table. If names are important for you then create a new, empty GeoPackage and copy all the tables you want to have into it, with the names and SRS that you like.