When matching a string against a regex, the engine will try every position from left to right until a match is found.
Since the string is scanned from left to right, (?:/)(.*?)(?:/)$ can find a match at index 0 of the input string /1000/2000/.
The lazy quantifier only affect the order the repetition is tried. It will try empty string, then repeat once, twice, 3 times, etc. Since . matches anything except for line terminators, and the string is tried from left to right, the whole /1000/2000/ is matched.
By the way, while it's usually said that .*? matches the least number of character possible, the correct definition is that lazy quantifier will try expanding the atom (in this case is .) the least number of times possible, so that the sequel (in this case is (?:/)$) can be matched.
The solution, as mentioned in other answers, is to limit the set of allowed characters in between / by replacing . with [^/]. After the character class is changed, you can use either greedy or lazy quantifier, since the grammar has become unambiguous, thus the search order doesn't affect the final result.
somethingbetween/, right before the end of the string.