The GPL is a copyleft open source license: it allows you to use and modify the GPL-covered software for any purpose. But when you create a modified version (such as by including GPL-covered code into a larger program), then you can only distribute that modified version under GPL terms, and all recipients/customers get the same freedom to use and modify that software for any purpose.
So the answer to question 1 is yes, you can sell software based on GPL-covered components. However, you must not only give your customers the corresponding source code, but also the right per the GPL license to use and modify that software for any purpose. So, the customers would legally be able to re-sell the GPL-covered software (potentially including some or all of your code).
This makes it difficult to "sell" GPL-covered software. The cost for the software itself tends towards zero. Instead, business models around GPL-covered software tend to involve:
- selling support contracts – the RedHat model
- consulting work to implement specific features
- selling convenience, e.g. packaging binaries for easy installation
- dual licensing – that's the model used by the library you'd like to use
- open core (but for copyleft licenses that requires a kind of dual licensing)
Another possible solution lies in your question 3.
The GPL itself does not clearly explain the scope of its copyleft effect. Instead, this depends entirely on what copyright law in your applicable jurisdictions consider to be a derivative work. However, the general understanding in the open source community is that the GPL applies roughly on a per-process level. If a program is designed to link to a GPL-covered library (statically or dynamically), then the entire program would be GPL-covered – not just those specific components that interact directly with GPL-covered components. In particular, this means that you can't insulate a proprietary component from a GPL-covered component with a permissively licensed component in between.
But if the proprietary component and the GPL-covered components are in entirely separate programs, that would be fine. The GPL allows GPL-covered code to be distributed alongside proprietary software ("mere aggregation"). Thus, it might be possible to wrap the GPL-covered component with a generic command line interface or REST API, to publish that GPL-covered program, and to then interact with that separate program from your proprietary code. For example, you can write proprietary code that interacts with a copyleft-licensed database engine, as long as the database runs in a separate process and you only interact via the database's wire protocol.