In sufficiently recent versions you can code
However this is not documented and not recommended. It is safer to code
solve(-15 < 10*S & 10*S < 15, S)
However, what you cannot do using that interface is get out an inequality. You would like to get out -1.5 < S < 1.5 but you will not be able to get that in any direct way. When you use that interface, you will get out what I have in the past referred to as a "representative solution", such as "1" or "pi" -- a "nice" number that the system is true for. In the past I have posted a best-effort examination of exactly how it determines the representative solution to use.
What can you do? Well, two possibilities:
1) You can convert to equalities and solve on the two sides like you did except with == instead of <
negative = solve(-15==10*S,S);
positive = solve(10*S==15,S);
and be careful on the boundary condition.
2) More obscurely,
>> feval(symengine, 'solve', -15<10*S <15)
matrix([[S]]) in solvelib::cartesianPower(Dom::Interval(-3/2, 3/2), 1)
That is, the symbolic engine internally already calculates and returns intervals just as you might hope, and it is the nice MATLAB interface to the internal symbolic engine that turns them into the near-useless representative solutions. You can get at the boundary values returned by feval() by using children().