Commerce: How do I use an adjustor for line items?
I'm finding the question hard to follow, but if I am understanding you, then yes I would do it all in the adjuster - rather than using a discount here... I don't see what using a Commerce discount here offers, as you can't really express your credits system in any way meaningful that relates to a Commerce discount I think.  

So this indeed looks like a job for an adjuster, which can act at either the lineItem or order level as per the linked example.

In terms of where you put that adjuster, there are basically three steps.  The first two are in your main plugin file:

public function init()
{
  Craft::import('plugins.yourPluginHandle.adjusters.YourAdjusterClassName');
}


and then later in that file...

 public function commerce_registerOrderAdjusters(){
   return [
     new BusinessLogic_TaxRemover
   ];
 }


Then, you have the actual code in your adjuster to do whatever you want to do, which (repeating that example), looks like this:

    &lt;?php

    namespace Craft;
    use Craft\Commerce_LineItemModel;
    use Craft\Commerce_OrderAdjustmentModel;
    use Craft\Commerce_OrderModel;

    class BusinessLogic_TaxRemover implements Commerce_AdjusterInterface {

    public function adjust(Commerce_OrderModel &amp;$order, array $lineItems = []){

    $myAdjuster = new Commerce_OrderAdjustmentModel();

    $order-&gt;baseDiscount = $order-&gt;baseDiscount - 5;

    $myAdjuster-&gt;type = "Test";
    $myAdjuster-&gt;name = "Test Adjuster";
    $myAdjuster-&gt;description = "Takes $5 off the order";
    $myAdjuster-&gt;amount = -5.0;
    $myAdjuster-&gt;orderId = $order-&gt;id;
    //if your Adjuster affects lineItems rather than the total, you record the ids here
    $myAdjuster-&gt;optionsJson = ['lineItemsAffected'=&gt;null];
    $myAdjuster-&gt;included = false;

    return [$myAdjuster];

   }

}


...the main thing to note in there is you need to record the ids of any lineitems you're adjusting by changing this - ($myAdjuster-&gt;optionsJson = ['lineItemsAffected'=&gt;null];