At the risk of sounding like a Python fanboy—it’s only one of several languages I use—open source has solutions to some of these drawbacks.
What you actually mean by “dependency on whitespace” is nesting by indentation. This feature is certainly an outlier amongst languages and people usually either love it or hate it. I was on first name terms with Guido when and where the predecessor to Python, ABC, was developed as an educational language to surplant BASIC, so I know where it came from. For me it’s just meh, you can work around it with an IDE or a smart editor.
Use without declaration is a common feature of interpreted languages. You can ameliorate some of the drawbacks by using a checker like pylint. Most of the time, an unintended variable will show up as a reference before set, or a set with no reference. I should mention that some modern languages like Rust and ML are strict type-checked without declaration by using type inference.
Similarly it’s not correct that there’s no compilation phase. There is, to bytecode, but execution follows immediately so you think of it as interpreted. Also a syntax error will not allow execution. Some errors due to dynamic aspects of the language are not however caught until execution. You can run a compilation by itself or use a checker like pylint again.
Besides IDEs there is the autopep8 tool which advises on best practice formatting for readability and is worth using before releasing your opus to the world.
For a web based multimedia project I did, I chose PHP, because it was the most suitable for the task, despite frustrations with it. I did however use a MVC framework so there was an organising concept.
For another project involving HL7 standards I used Java despite its prolixity, because the overriding factor was the existence of a very complete class library implementation.
For KiCad I would stick to Python because it’s supported. Of course you can write external scripts to process files in any language, including bash or sed if you wish, but you lose the tight integration of objects and methods with the running KiCad program.