Como resposta ao comentário de @Richard Law, o nome da tabela rtree virtual que contém o índice espacial no GeoPackage é sempre nomeado de acordo com o modelo
rtree_[table_name]_[geometry_column_name]
Portanto, você pode fazer uma consulta SQL que verifique a existência da tabela rtree.
Por exemplo, você pode verificar se a tabela "table1" possui um índice espacial com ogrinfo
ogrinfo -sql "SELECT EXISTS(SELECT 1 FROM sqlite_master WHERE tbl_name like 'rtree_table1_%') as has_spatial_index" mygeopackage.gpkg
INFO: Open of `mygeopackage.gpkg'
using driver `GPKG' successful.
Layer name: SELECT
Geometry: None
Feature Count: 1
Layer SRS WKT:
(unknown)
has_spatial_index: Integer (0.0)
OGRFeature(SELECT):0
has_spatial_index (Integer) = 1
Nesse caso, os índices espaciais existem. Caso contrário, teria sido "0".
No GeoPackage, uma tabela pode ter apenas um campo de geometria e, portanto, basta fazer uma verificação com apenas "rtree" e o nome da tabela sem saber o nome do campo de geometria como rtree_table1_%
.