Problem/Motivation
Today I have encountered an odd situation on a project which had Facets 2 installed. 
composer show drupal/facets | grep version
versions : * 2.0.9
I have tried to install drupal/facets_exposed_filters because it was a dependency of another module I tried and was missing - did not realize that this is a submodule of Facets, actually Facets 3.
composer show drupal/facets | grep version
versions : * 2.0.9
β― ddev composer req drupal/facets_exposed_filters
./composer.json has been updated
Running composer update drupal/facets_exposed_filters
Gathering patches for root package.
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
  - Locking drupal/facets_exposed_filters (3.0.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
Gathering patches for root package.
Gathering patches for dependencies. This might take a minute.
  - Installing drupal/facets_exposed_filters (3.0.0)
....
Using version ^3.0 for drupal/facets_exposed_filters
The submodule was installed by Composer but actually it was not:
$ ls web/modules/contrib/facets/modules
facets_range_widget  facets_rest  facets_searchbox_widget  facets_summary
because for actually installing it Facets 2 must have been updated to Facets 3 since facets_exposed_filters only exists in Facets 3.x:
From the attached composer.lock diff it is obvious what happened; it has not been told to Composer to update the parent module ( "drupal/facets": "*",)  therefore it left as-is and made no change basically.
Steps to reproduce
Proposed resolution
Metapackage generated for a submodule must lock on the same version of the parent module  that bundles it to avoid this unexpected behavior.
Remaining tasks
User interface changes
API changes
Data model changes