In this case http proxies are basically a specialization of socks proxies to limit the protocol to http.
That is not what an HTTP proxy is or does. An HTTP proxy simply uses the HTTP protocol to communicate with the client, but with special semantics, like requiring absolute URLs in the request line of GET/POST requests, or using the CONNECT verb to establish a raw byte tunnel. HTTP proxies work with HTTP and non-HTTP clients alike.
And that is what you are using: a http client so you *should* / *must* limit to the http protocol.
That is simply not true. The HTTP protocol has no such limitation. There is no requirement that an HTTP client must use an HTTP proxy. Most commonly used web browsers can quite happily use SOCKS proxies for HTTP connections. And many non-HTTP clients support HTTP proxies for non-HTTP traffic.
In the case of the standard TFPHTTPClient I did not understand how to use socks proxy. In wiki, too, not found the big info. How to work through socks proxy???
I don't know if TFPHTTPClient supports SOCKS proxies or not. You already found a solution in Synapse. Indy's TIdHTTP component also supports HTTP and SOCKS proxies (HTTP via the TIdHTTP.ProxyParams property, and SOCKS via a separate TIdSocksInfo component assigned to the TIdHTTP.Socket.TransparentProxy property).