This is fixed by extracting the interesting bits and using indices() on them (and at the same time, I'm dropping the creation of the variable $id_list, as it's strictly not needed):
$ jq '. as $list | (map_values(.thing == "3") | indices(true)) as $id_list | $list[$id_list[]$list[.[] + 1]' file
{
"thing": "1",
"other bits": "unimportant"
}
{
"thing": "A",
"other bits": "unimportant"
}
null
. as $list | select_indices(.thing == "3") as $id_list | $list[$id_list[]$list[.[] + 1]