Can the USB module of STM32F103 be clocked by the HSI?
USB, as per the spec, requires the frequency to be within 0.25% (2500 ppm) of the ideal value (for full speed - high speed needs a more accurate clock). In the datasheet of STM32F103xB (chapter 5.3.7: Internal clock source characteristics), you'll see that the HSI is guaranteed to have, even at a steady 25°C, a tolerance of -1.1% to +1.8%, which is not enough.

Note that the STM32F0 (specified for crystal-less USB, as you noticed), has a HSI48 specified with even worse tolerance (-2.8 to +2.9%), which, at first, seems contradictory. But it also has a feature called automatic trimming, part of the Clock recovery system (CRS) block (mentioned in chapter 3.20 of the datasheet, and described in full details in chapter 8 of the reference manual), which allows this oscillator to be adjusted depending on the SOF frame received from the USB, effectively recovering a clock with the required tolerance.

This clock recovery system is not included in the STM32F1, so you can't rely on USB to work properly on this chip without an external crystal. Chances are you've got a chip with more-than-average accuracy of the HSI, but it may not work with another sample.

In short: don't do that, unless it is a one-off prototype.