The problem here was that Congress tried to get cute, and the Court called them on it.
The Democrats wanted a bill that would restrict the Court's jurisdiction only over future cases, not pending cases. The Republicans (or at least most of them) wanted to remove jurisdiction from all cases, including pending ones. What they wound up passing was a bill that had 3 separate jurisdiction-stripping provisions. Two of them explicitly said that they applied to all pending and future cases. The third (actually, it was the first)-- the one that applied to cases brought by Gitmo internees-- didn't say either way. Then both sides made floor speeches explaining how the bill supported what they wanted to do.
You are right to the extent that Scalia probably had the better of the argument that ambiguity in jurisdiction-stripping bills should be interpreted against continued jurisdiction. But the issue was not clear-cut, and that ambiguity is absolutely Congress's fault. So the majority was not being clearly lawless here.
Actually the bill had only one jurisdiction-stripping provision, 1005(e)(1). The other 2 provisions--(e)(2) and (e)(3)--*granted* new exclusive jurisdiction to the appeals court; there was no jurisdiction-stripping in those 2 sections.