Some people seem to think that "unlocking" the framerate in a game is a trivial thing to do, when that's not the case. Let me try to explain how these things work.
For a game to properly work with an unlocked framerate, it has to be specifically programmed to support a variable framerate. Online multiplayer-ready engines like Unreal Engine 3 offer all this functionality (as well as all engines derived or inspired by ID's work on Quake 1/2/3), so this is why DMC can run at whatever framerate just fine.
However, many Japanese developers prefer to do everything in-house and are often not as up-to-date in certain programming practices. Also, when targeting a console it's infinitely easier to simply assume a fixed time has passed between each frame than implement proper variable framerate support.
Those with a little understanding might be asking: "
wouldn't it be a simply matter of measuring how much time passed since the last frame instead of using a fixed value?". Well, that's technically true and it does seem to work when you implement it... at first.
The problem is that two 60fps frames will not produce the exact same simulation result as one 30fps frame. Characters will travel slightly different distances, accelerating/deaccelerating bodies will have slightly different velocities and so on. This is all due to
floating point numbers having a limited precision, which means that (X * (1/60)) + (X * (1/60)) produces a slightly different number than (X * (1/30)). Example: falling to your death while sliding down stairs in Dark Souls with unlocked framerate on.
For some kinds of games, the inaccuracies can have no perceptible effect. However, it can be an issue if the game needs to reproduce a simulation based in inputs, like recording replays or featuring input-based netcode.
So, a proper way to support variable framerates is to have your game simulation run at fixed time (so it's predictable), but have the rendering interpolate between the current and the previous simulation states at variable time, so the animations and movements show as smoothly as they can without messing up the simulation.
This article explains how to do it and talks about the caveats of the fixed and variable timesteps.
However, this technique has one drawback: it introduces some input lag, since the game is displaying an interpolated state of the last two simulation states, instead of drawing whatever it calculated right away. This is the source of the so called "engine lag" in many modern games.
TL/DR:
It's unfair to call a port of a game that was not designed to support variable framerates "lazy" because variable framerate is not a simple flag to be enabled and supporting it might require too deep changes to the game's architecture.