If the files and directories are owned by the user, then they are probably not owned by the user that Apache2 runs as.
It's not that your userid can't write to those directories, it's that Apache2's userid does not have permission to do so.
Using suPHP would be best, especially on a shared server.
If you are not on a shared host, meaning other people don't/can't log into your box and YOU can become the super user (root), you can assign ownership to two sub-directories and files and automatic plugin upgrades will work.
If you share the server, then don't do this. It's a huge window to exploit. Seriously, don't.
Backup your files before trying this. If the bad thing happens, you'll need to put them back the way they were.
Identify what the Apache2 user runs as. On Ubuntu it's www-data and I'm going to use that UID and GID for my example.
As root and on the command line, go to your blog directory (cd /somewhere/you/keep/wordpress) and run these commands:
find wp-content | sed -e 's/\ /\\\ /g' | xargs chown www-data:www-data
find wp-admin | sed -e 's/\ /\\\ /g' | xargs chown www-data:www-data
These 'find' commands locate all the files and directories in wp-content and wp-admin.
The 'sed' command escapes out an spaces you may have in file names or directories. Most commands don't like getting spaces in their arguments without escaping them or double quoting them.
The 'xargs' command handles large lists of files so that the last command 'chown' will not choke on the volume.
The 'chown' command will assign the files and directories to the userid that Apache2 is running at (if you are using that userid).
WordPress needs the wp-content directory writeable so that the plugins can be downloaded and stored for unziping and moving into the plugins directory.
I don't have a good reason why wp-admin needs to be writeable, but this won't work otherwise.