I have looked at a few projects that try to make reusable components or are able to generate full systems. The main problem IMHO is that that languages that are currently used “for real” e.g. verilog and VHDL are to low level and interfaces are basically not defined. It means that any attempt ( see opencores) at creating reusable components is kinda hopeless with these technologies. (there are some well known interface like wishbone that can help here but those are not the things you normally start with a developer.
I know of 3 systems
Python (migen) based system to create hardware “easily” and this is true. with Litex, the active community around it and the many examples it is trivial to create a full system and add your little pieces of code.
The bad news is that the syntax for “the low level stuff” is not very elegant and you kinda have to know both python and verilog/vhdl to understand what you are doing. Still it has been one of the more productive systems I tried and keep using(it is mostly code generation)
A system that is more seriously designed to be a real language and provide the high level abstractions you are looking after is SpinalHDL. it is know for the configurable VexRiscv core. The main problem here is adoption and there are not so many cores available in this language but still recently discovered
https://github.com/SpinalHDL/SaxonSoc that I did not yet try.
For short: The real fun and basics and understanding of FPGA’s is best experienced using verilog/VHDL have a look a the example code from Lawrie on github!
If you want some help and are practically oriented (e.g. have a project you just want to get done) use litex.
If you are in here for “improving the world” perhaps that SpinalHDL is something for you.