It is not necessary, but that is the recommended design pattern.
There are some other approaches that also work well. If you will look at adefwebserver.com, you'll see that Michael Washington advocates the use of Linc to SQL to simplify the data access layer.
And, just recently Shaun Walker (the creator of DotNetNuke) has written this blog entry
about a lightweight approach to module development.
Remember, DotNetNuke is "just" another ASP.NET application, so you can do pretty much anything that is allowed. Following the framework and "rules" keeps your site upgradable.