Is there a better way to implement responsive images than what WordPress uses by default?

Unfortunately, I’ve found the images within Gutenberg/block editor a lot left to be desired and the development work with images in 2020 has been primarily focused on adding cropping, rotating images within the block editor.
The limitations of responsive images in the block editor is one of my biggest criticisms of the block editor.

What you’ve described so far is impressive and writing up your findings in more details would probably help others who are trying to figure out the best practices of images within the block editor.

Issue #6177 has a lot of the background and discussion on improving the use of responsive images in the block editor although some of the information may be out of date already.

If I have to use WordPress’ image block, is there a way to customize srcset with w descriptors and sizes within the image block itself?

Unfortunately, it’s not yet possible unless you do some extensive customization where you would write this functionality yourself.
There is an open issue to add/customize the default srcset sizes on Gutenberg’s image block.

Are multiple image uploads within a custom image block even possible with WordPress?

The core WordPress image block is designed to only do one image; for multiple images, use the gallery block.

However, I do not want WordPress to automatically make every single different image size when I upload one image file.

Agreed, there may be some instances when you do not every this is a frustration with and exists within the entire WordPress ecosystem, not just within the block editor. I’ve heard of one solution where you could customize which images sizes are made when you upload image within a custom post type but that’s a bit round-about way to do it.

Lastly, one of the fundamental issues, in my more layman’s opinion, is that the underlying code for a single image block is different than the one used for Gallery which allows you to implement so some of the code underneath cannot be shared. (reference: https://github.com/WordPress/gutenberg/issues/10057#issuecomment-617000905 and https://github.com/WordPress/gutenberg/issues/11436