It's just 1 folder 1 .java file. Can't possibly have another lib class in this same package.. Googling doesn't give me helpful information.. The discussion out there mostly focused on "duplication".. I don't have that..

It's all down to the classpath.
When you try to compile testlib it is looking for the class 'lib'.
It finds it on the classpath (which defaults to '.', ie the current directory), except that 'lib' is actually 'ABC.lib' so it flags an error, because 'ABC.lib' should be in a directory 'ABC' on the classpath and it isn't.

SO you need to set the classpath instead of relying on the default:
javac -cp .;C:/java testlib.java

which puts the current directory ('.') as well as the directory containing the ABC folder, which is the root of your packages.

I understand the classpath part. I in fact have .;C:\java set as my classpath environment variable. I've done other package using this way before.

I notice it's placing the client java file in the same direction as the package that's giving the problem...

I just moved testlib.java to a different folder called DEF, i tried to place DEF as a subfolder of ABC or in parallel as ABC, both way compiles, but when the client (importing ABC.*;) is in the same dir as ABC class files, it fails.

I read up a bit about the sample project path structure (like those in eclipes and maven), I notice they place source .java file in src folder, compiled .class file in a com folder, and test client in a paralleled structured folder.. I guess there must be a strong reason for that practice. The striking element related to this context is the test client is not at the same folder as the .class files.

These are all my extrapolated understanding.. tried before to read up a system discussion/tutorial on projects/packages alone but to no avail.

Here is similar test case and solution to it. I'd also suggest that you use the suggested naming convention to make the discussion easier. For instance, use lowercase name for packages, and uppercase for class file/names.