I think you should be able to use nested iif statements to label your data the way you want. Something along these lines should work:
iif($feature.price < 1000, "$" + $feature.price, iif($feature.price < 1000000, "$" + $feature.price/1000 + "K", iif($feature.price < 1000000000, "$" + $feature.price/1000000, "")))
With this statement, prices below 1000 would remain unaltered. Prices above 1000 would then be checked to determine if they are less than 1000000. If so, labels follow the $1K - $999K format. If not, we check the next level up, and if necessary we can repeat this process to format values in the billions, trillions, etc (by inserting more iif statement(s) in place of the final argument).
UPDATE:
I modified the line of code slightly to make the pattern of nested iif statements a bit more apparent. As such, I deleted your edit describing the parse error, since the code each of us has is (almost) identical.
In reference to what you said you are wanting in terms of rounding the results, this can be accomplished via the "round" function. This function takes two arguments, and it rounds the number in the first argument to the number of decimal places specified by the second argument. It seems you are wanting to round your numbers to one decimal place, and the following statement should accomplish this:
iif($feature.price < 1000, "$" + round($feature.price, 1), iif($feature.price < 1000000, "$" + round($feature.price/1000, 1) + "K", iif($feature.price < 1000000000, "$" + round($feature.price/1000000, 1), "")))
Note that this is exactly the same structure as the original set of nested iif statements.