So You can actually use any visual Force page for this and you don't have to pay extra money.I use authenticated website user profile for all of my users and- for the beginning-, yup you are completely true about not to be able to reach to account,contact etc.
But Incase create a couple more variables as properties(for example:if you gonna use name,phone and mobilephone create three of them) and assign your contact list's fields to those variables.(like- AccountnameforVF=AccList[0].name,AccountphoneforVF=AccList[0].phone
).
At the end of your process.Write a method on the same class for the button on that page and just write update AccList on that.
But to be able to achieve this, first you need to assign back(like- AccList[0].name=AccountnameforVF and update AccList;
) and then you can update them easily.
And If you are not gonna use a portal page then just create that visual force page and override the edit button on contact.
Example
public string domatesname {get;set;}
public string domatesbankname {get;set;}
public string domatesBranchname {get;set;}
domates = [select id,name,Phone,Account_Classification2__c,Odeme_Sekli__c,Banka_Adi__c,Sube_Adi__c,Sube_Kodu__c,Hesap_Sahibi__c,IBAN_Numarasi__c,Total_Budget__c,Daily_Budget__c,Total_Cost__c,Remaining_Budget__c,Commission_Amount__c,
ManagedBy__c from Account where Id=:CurrentAccount.id];
domatesname=domates[0].name;
domatesbankname=domates[0].Banka_Adi__c;
domatesBranchname=domates[0].Sube_Adi__c;
then in the page under the button's action
call the method you wrote
public void InfoUpdate()
{
domates[0].Banka_Adi__c=domatesbankname;
domates[0].Sube_Adi__c=domatesBranchname;
domates[0].Sube_Kodu__c=domatesBranchCode;
update domates;
}