I wonder if it is intended behavior? Most likely cached (prebuilt) versions of units that depend on deleted units is used.
Steps to reproduce:
1. In Lazarus create a simple program, add Unit1 and Unit2.
2. Add Unit1 to program's uses section, add Unit2 to Unit1's uses section.
3. Compile. [The attached project is at this step for your convenience]
4. Remove unit2.pas from the Project Inspector.
5. Physically delete unit2.pas
6. (Optional) do some changes elsewhere, e.g. add writeln in program.
7. Compile.
Compilation successful. Even though unit1 still has unit2 in uses section. Clean up and Build correctly throws a compilation failure because unit2 is not found.