Probably one of the most common tight couplings I see is a dependency on system time, i.e. using DateTime.Now or DateTime.UtcNow directly in your code without any abstraction around it. A tight coupling that typically leads to very complex and fragile tests when trying to ad test coverage.
I have noticed that most articles on how to author NuGet packages focus on the practical part; which commands to run and how to setup your own NuGet server. All these articles also fail to point out the most important information in the NuGet guidelines.
As you may know if you followed my blog before; I like to roll my own fake. For interfaces it is pretty straight forward with explicit implementation of the interface and properties with delegates for implementation.