What is the least amount of time that I can measure using STM32F1x Timers?
Since your controller is running at 72 MHz, the minimum delay between two consecutive instructions is 1/72 µs. The internal flash is not fast enough for that, you must run your program from the internal RAM to achieve this.

To obtain a delay of exactly 1 µs, create a sequence of assembly instructions that takes exactly 71 cycles to complete. Get rid of HAL, it's too complicated and hence unpredictable for this kind of work. The trivial approach would be a sequence of 71 NOP instructions, but that's a bit wasteful. In order to construct some loop in inline assembly, you'd have to consult the cycle counts of processor instructions and addressing modes. To run it from flash, take flash latency and prefetch buffer behavior into account, as described in chapter 3.3.3 of the reference manual.