To make a game like Degrees of Lewdity, its all about learning 'state management' and every engine and language is a little bit different. Mainly its about organizing your game and code, and what organizational tricks you can use depends on the engine.
I too want to make a degrees of lewdity like game, but I'm getting tired of 'planning' and want to move on to 'making.' I've wanted to use Twine with sugarcube as because as you mentioned, seems to be how DoL was made, and it has the advantage of being HTML thus universal to play everywhere without even needing to download the game, however as far as I've been able to tell, twine is good for story telling, but its a bit cumbersome to get to the programming part and actually make the game.
I too recently looked into renpy and am now feeling the need to develope a game using ren'py instead. As someone with a main focus in C# programming, I am more used to creating code that performs 'state management' and then making my main game making code clean and slick. However that takes time to build a framework. looking into renpy, the way I would describe it is how most programmers would describe python, it 'feels' dirty, but its super quick, its still very powerful, and you can focus on 'making' rather than 'designing'.
As I mentioned, I'm getting tired of 'designing' and just want to 'make' so I'm giving renpy a try, as well as changing how I approach game making, being story and art focused first and worry about gameplay later. I tend to have all these cool demo, but never wanting to make assets for the game because its simply to big and complex and feels like a job rather than a hobby.
Note: the reason renpy feels dirty
it sounds like you may not be a programmer (yet), but basically, you are doing coding right inside of the actual story writing. Thats nothing different or new, its like formating 'strings.' where it gets dangerous though is that you can call any variable, manipulate any variable, and you have to manually instruct the code when and where to go, with the hope that you understand what the coding will behave and return as expected. All programming is like this, but with more OOP languages you can make the flow rather modular and due to OOP paradigm, you can't do bad programming because it limits what you can do (ie, can't manipulate character data in code that isn't for the character), so when coding with other languages you are often making code that makes it so you can code safely, and making ways to be 'official' about how to manipulate state data. but with renpy, everything is technically in the 'global' space meaning you can do anything. you are free and unrestricted, which means you can possibly make bad and hard to debug code (to many scripts changing the same variable causing conflicts, like maxing out a characaters stat or something), which programmers have been 'programmed' to be scared of, but if you ignore the fear it does allow for a little bit of coding to be just as powerful as deveolping dedicated systems.