when is more convenient to develop an application coding in script and when is it better to use a high-level library like BitcoinJ or a service as Blockchain.info API?
Those are three different things usable only for very different purposes. They are not really alternatives to one another, they are not equivalent.
Script
Bitcoin script is not, as your question suggests, some high performance language and it does not have “high sematic power”. It is a deliberately crippled mini-language used only for expressing payment conditions attached to financial transactions. It is misused for hiding data in parts of scripts that can never be executed (i.e. parts that would be eliminated during coverage analysis in many conventional development environments). There is no way you could use Bitcoin script for complete applications of the sort that Java programmers typically use Java for.
Java (and Python and C and C++ and Rust and Go …)
I don’t need to describe Java. It is a general purpose language typically dependent on a run-time environment (JRE). As you noted, there are libraries that simplify (if that word can ever really be applied to Java libraries) the use of Bitcoin RPC APIs, the use of Bitcoin network protocols and, probably,
the construction of Bitcoin transactions including creating locking scripts in Bitcoin script language.
Blockchain.info API (and APIs of other businesses that offer access to an indexed copy of the blockchain)
I’m not familiar with this API but it’s range of capabilities must be very different from that of, for example, the JDK and Bitcoin libraries. It obviously involves trusting a corporation with any data you pass through it’s API. I would always remember that the main intent of Bitcoin was to create a system of electronic cash by which one party could pay a second party without the need for any trusted third party.