...No, it isn't artwork, and it the quirks of Unity, the hours spent bug hunting, or any of the other things I usually complain about. It's manually creating pseudo-randomness.
Games with set levels (see: Sonic the Hedgehog, Crash Bandicoot, Ratchet and Clank...) require specific obstacles that the player will face, if not exactly linearly than at least one-at-a-time. (What I mean by this is that there might be multiple paths through a level, but each path has one thing followed by something else, followed by something else...) Obstacles can be anything from environment setpieces to enemies to puzzles, and it's a massive balancing act to work all of these things together. For one thing, they need to be level-appropriate: anything the player faces must be able to be overcome by them at their current skill level, both within the game and without. So you have to keep in mind the player's health level and unlocked abilities, but just important is their current knowledge, what you've already taught them about the game up to this point (puzzles, timing challenges, and the like should start easy and get more difficult as time goes on). All of this probably requires a dedicated level designer, because it's one thing to come up with a list of cool player abilities, another to design small, boxed-in scenarios where they can be used, but something else entirely to string them together into something that is A) fun, and B) doesn't feel like just doing one puzzle room after another (unless that's the sort of game you're going for, I guess).
I'm not skilled enough at that to be a level designer, and outside of S.P.A.R.K. (the eternal exception), the games I've made haven't been those types of games anyway. But a lot of them have still needed randomness in their levels, from FIWF's rollercoaster shape to the room designs in TotR and of course all of Alien Cow Farm's planets. And like I said at the beginning, doing that is hard. For FIWF, I wanted to have track pieces that could be interchanged on the fly, but for some reason matching up the start and end points in the art was not possible. We eventually just had a few different entire rollercoasters to randomly choose between. For TotR, randomly placed furniture in the rooms led to areas where enemies and objects like the hockey puck would get stuck, so instead we ended up using pre-built rooms, one for each trial that was guaranteed to be safe for it. And for ACF, I spent hours and hours deliberating where to place each tree, rock, and mushroom, then even more time flying around my randomly-generated maps to make sure there weren't problems at the tile borders. I struggled with things like saturation, rotation, and scale, because there was no guide I could use to know when a layout was "perfect". There was no absolute point of being "done", and that includes the fact that I could always go back and add even more tilesets to be shuffled into the mix. If you're just creating your level pieces completely randomly, how do you know when they're "right"?
UO brought on a new wave of this uncertainty. I created stalactites of a whole bunch of different shapes and sizes, followed by half a dozen sea creatures complete with unique movement patterns, and then I procrastinated for a few weeks rather than actually set up the level section prefabs. It just seemed like an overwhelming task, and this time it would require even more testing as I worked, to make sure that the obstacle placement resulted in the right amount of difficulty. This involved mostly the amounts of clearance between things, but since UO is another section-based game, I needed to check going from one section to each other one as well. And since UO is entirely a section-based game, I needed to make a whole lot of sections to stop the game from feeling repetitive. It only took a couple days to finish everything for one level, but I still felt uneasy the entire time. Should I make more? Should I scale the stuff just a little bit bigger or smaller? Should I move the octopus' starting position a bit more to the left or right? Should I abandon this game for a third time and move on to something more fun and less stressful?
When creating the prefabs, I gave myself an outline of the entire area I had to work with, and placed the moving obstacles (the sea creatures) first. Then I added stalactites around them, trying to make sure that there were multiple ways to get through each "gate". Usually, this would be as simple as controlling the sub's speed to time it right and either go over or under the moving thing when it had the most clearance in that direction, but you could also always use your torpedo as a last-second save if you can't maneuver correctly fast enough. I also made a few sections that were purposely sparse, just so that the player has a chance for a bit of a breather every one in a while.
At this point, I'm pretty much relying on playtesters to tell me what I did right or wrong with the "level design". My testing has sufficiently proved that what I did is functional, but as I mentioned before, that's not enough. The game has to be fun, too. Why don't you try it out yourself, and let me know how I did?