Composer issue updating sprout plugins
You've identified the general problem. The easiest path around this issue is to upgrade to the latest of everything all at once. composer update alone will not upgrade to the latest major release, only to the latest releases defined in your composer.json. To make sure you are upgrading to the latest of everything:


Delete your composer.lock file (might not be necessary but I find it helps get around a few potential support scenarios to take this step)
Review each package in the require array of your composer.json
Update each package to the latest version release.
Once all packages are defined with their latest versions, run composer update


Regarding version constraints in your composer.json file, you'll probably want to require an explicit version of Craft and us the Caret Version Range for plugins:

{
  ...
  "require": {
    "craftcms/cms": "3.1.23",
    "vlucas/phpdotenv": "^2.4.0",
    "barrelstrength/sprout-forms": "^3.0.0-beta.57",
    "barrelstrength/sprout-email": "^4.0.0-beta.18",
    ...
  }
  ...
}


By updating to the latest versions of everything all at once, you'll ensure that the major releases of supporting modules that may be used by more than one plugin are updated and resolved together.

If you continue to run into issues you may want to try to run remove commands first (i.e. `composer remove barrelstrength/sprout-forms barrelstrength/sprout-email) or remove your entire vendor folder and go through the steps above again.

You should not need to require barrelstrength/sprout-base. Once you get the primary list if required packages in your composer.json file sorted out, the correct dependency will get resolved.